1. 程式人生 > 其它 >Selenium+Python自動化測試(2)-控制瀏覽器

Selenium+Python自動化測試(2)-控制瀏覽器

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()

參考連結

WebDriver-Browser manipulation