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