Selenium在對瀏覽器操做時會有自動化代碼中不穩定的部分,常常出錯的部分,能夠將這部分對網頁元素進行操做的代碼換成對應的JavaScript腳本,因爲瀏覽器原生的支持JavaScript,JavaScript代碼直接在瀏覽器內核中執行,就不會出現元素不在所點擊的位置等錯誤,能夠大大提升自動化用例執行的穩定性和執行效率。javascript
調用JavaScript方法有兩種:html
一、execute_script():此是同步方法,用它執行js代碼會阻塞主線程執行,直到js代碼執行完畢。java
execute_script()方法若是有返回值,會有如下幾種狀況:web
二、execute_async_script():此是異步方法,它不會阻塞主線程執行。chrome
同步執行JavaScript和異步執行JavaScript的區別數組
同步執行:driver.execute_script( js)瀏覽器
若是JavaScript代碼的執行時間較短,能夠選擇同步執行,由於Webdriver會等待同步執行的結果,而後再運行其它的代碼。異步
異步執行:driver.execute_async_script(js)async
若是JavaScript代碼的執行時間較長,能夠選擇異步執行,由於Webdriver不會等待其執行結果,而是直接執行下面的代碼。ui
咱們來舉個栗子實踐一下如何使用,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中還能夠實現不少功能,咱們在後期實踐過程當中再總結
原文出處:https://www.cnblogs.com/wuweiblogs/p/11430136.html