1. 程式人生 > >Selenium3 + Python3自動化測試系列十——呼叫JavaScript程式碼

Selenium3 + Python3自動化測試系列十——呼叫JavaScript程式碼

呼叫JavaScript程式碼

一、呼叫JavaScript程式碼方法

  Selenium在對瀏覽器操作時會有自動化程式碼中不穩定的部分,經常出錯的部分,可以將這部分對網頁元素進行操作的程式碼換成對應的JavaScript指令碼,由於瀏覽器原生的支援JavaScript,JavaScript程式碼直接在瀏覽器核心中執行,就不會出現元素不在所點選的位置等錯誤,可以大大提高自動化用例執行的穩定性和執行效率。

  呼叫JavaScript方法有兩種:

  1、execute_script():此是同步方法,用它執行js程式碼會阻塞主執行緒執行,直到js程式碼執行完畢。

  execute_script()方法如果有返回值,會有以下幾種情況:

    • 返回一個頁面元素(document element),這個方法就會返回一個WebElement
    • 返回浮點數數字,這個方法就返回一個double型別的數字
    • 返回非浮點數字,方法返回long型別數字
    • 返回blloean型別,方法返回Boolean型別
    • 返回一個數組,方法發揮一個List型別
    • 其他情況,返回一個字串

  2、execute_async_script():此是非同步方法,它不會阻塞主執行緒執行。

二、execute_script()與execute_async_script()區別

  同步執行JavaScript和非同步執行JavaScript的區別

    同步執行:driver.execute_script( js)

    如果JavaScript程式碼的執行時間較短,可以選擇同步執行,因為Webdriver會等待同步執行的結果,然後再執行其它的程式碼。

    非同步執行:driver.execute_async_script(js)

    如果JavaScript程式碼的執行時間較長,可以選擇非同步執行,因為Webdriver不會等待其執行結果,而是直接執行下面的程式碼。

三、舉個栗子  

  我們來舉個栗子實踐一下如何使用,execute_script()調取執行JavaScript程式碼。呼叫簡單的alert彈框js語句,具體程式碼如下:

from selenium.webdriver import Chrome
from time import sleep

# 開啟百度首頁
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("https://www.baidu.com/")

# 彈出一個alert彈框
js = "alert('這是一個alert彈框');"
driver.execute_script(js)
sleep(2)
# 關閉彈框
driver.switch_to.alert.accept()
sleep(2)
driver.quit()

 

  我們再來看一個栗子。我們都知道,用於調整瀏覽器滾動條位置的JavaScript程式碼如下:window.scrollTo(0,450);

  window.scrollTo()方法用於設定瀏覽器視窗滾動條的水平和垂直位置。方法的第一個引數表示水平的左間距,第二個引數表示垂直的上邊距。其程式碼如下:

from selenium.webdriver import Chrome
from time import sleep

# 訪問百度
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("http://www.baidu.com")

# 設定瀏覽器視窗大小
driver.set_window_size(500, 500)

# 搜尋
driver.find_element_by_id("kw").send_keys("selenium")
sleep(2)

# 通過javascript設定瀏覽器視窗的滾動條位置
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(3)

driver.quit()

  通過瀏覽器開啟百度進行搜尋,並且提前通過set_window_size()方法將瀏覽器視窗設定為固定寬高顯示,目的是讓窗口出現水平和垂直滾動條。然後通

過execute_script()方法執行JavaScripts程式碼來移動滾動條的位置。

  JavaScript在WebDriver中還可以實現很多功能,我們在後期實踐過程中再總結

&n