Selenium+Python自動化測試(2)-控制瀏覽器
阿新 • • 發佈:2021-11-26
Selenium+Python自動化測試(2)-控制瀏覽器
頁面設定
from selenium import webdriver import time # 使用谷歌瀏覽器驅動 driver = webdriver.Chrome() # 1. 開啟網址 driver.get("https://www.baidu.com") driver.get("http://news.baidu.com/") # 2. 獲得當前頁面的url地址 print(driver.current_url) # 3. 後退 time.sleep(2) driver.back() # 4. 前進 time.sleep(2) driver.forward() # 5. 重新整理頁面 time.sleep(2) driver.refresh() # 6. 獲得當前頁面的標題 print(driver.title) driver.quit()
執行輸出結果如下:
PS D:\Scripts> python test.py
http://news.baidu.com/
百度新聞——海量中文資訊平臺
多視窗控制
多視窗指的是,同一個瀏覽器下多個標籤頁;或者多個同個瀏覽器視窗。
import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.baidu.com") wait = WebDriverWait(driver, 10) # 1. 獲得當前頁面的控制代碼 original_window = driver.current_window_handle # 顯式等待:設定等待時長為10秒內,等待後面的條件發生。 # 如果超過設定條件未發生,則丟擲異常 wait = WebDriverWait(driver, 10) # 2. 獲得總視窗控制代碼數 driver.window_handles # 斷言當前的頁面控制代碼數是否為1 assert len(driver.window_handles) == 1 # 3. 建立一個新的便籤頁 tab driver.switch_to.new_window('tab') # 建立一個新的視窗 window # driver.switch_to.new_window('window') # 顯式等待:呼叫until裡的方法,知道返回TRUE或FALSE # number_of_windows_to_be ,特定視窗數量是否和實際視窗數量一致 wait.until(EC.number_of_windows_to_be(2)) time.sleep(2) # 迴圈目前的視窗控制代碼 for window_handle in driver.window_handles: # 如果不是第一個視窗,就切換到第一個視窗 if window_handle != original_window: # 4. 切換視窗 driver.switch_to.window(original_window) break # 5. 關閉當前的瀏覽器視窗或者標籤頁 driver.close() # 6. 關閉瀏覽器程序;後臺驅動程式程序;關閉與webdriver回話的所有視窗和選項卡 driver.quit()
inframe框架
定位inframe中的元素,首先需要定位inframe框架:
# 1. 使用frame的id元素
driver.switch_to.frame('buttonframe')
# 2. 使用iframe的順序
driver.find_elements_by_tag_name('iframe')[1]
# 3. 其他的定位方式與普通的Web元素的定位一致,這裡就不再詳細列出
進入inframe框架:
driver.switch_to.frame(iframe)
離開inframe框架
driver.switch_to.default_content()
瀏覽器視窗控制
設定瀏覽器視窗的顯示模式
# 1. 最大化視窗
# 一般情況下會填充整個展示螢幕,瀏覽器的選單欄和下拉條會存在。
driver.maximize_window()
# 2. 最小化視窗
# 隱藏在系統托盤中。該特性適用於Selenium4及之後的版本。
driver.minimize_window()
# 3. 全屏模式
# 效果等同於F11
driver.fullscreen_window()
瀏覽器視窗的尺寸
# 1. 獲得視窗大小
# 單獨訪問
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")
# 先儲存再單獨訪問
size = driver.get_window_size()
width1 = size.get("width")
height1 = size.get("height")
# 2. 設定視窗的大小
driver.set_window_size(1024, 768)
瀏覽器視窗的位置
# 1. 獲得視窗的位置
# 單獨訪問
x = driver.get_window_position().get('x')
y = driver.get_window_position().get('y')
# 先儲存再訪問
position = driver.get_window_position()
x1 = position.get('x')
y1 = position.get('y')
# 2. 設定瀏覽器的位置
# 以左上角作為起始點進行展示
driver.set_window_position(0, 0)
瀏覽器截圖
# 只擷取瀏覽器內容,不包含瀏覽器的選單欄和右側滑動條
# 返回並將base64編碼的字串轉換為image
# 括號裡面是儲存的截圖名稱,根據需求設定相對路徑或者絕對路徑
driver.save_screenshot('./image.png')
定位元素截圖
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1. 獲得定位元素
ele = driver.find_element(By.ID, 'su')
# 2. 擷取定位元素的截圖
# 括號裡面是儲存截圖的名稱,根據需求設定成相對路徑或者絕對路徑
ele.screenshot('ele.png')
driver.quit()