最近在编写selenium自动化测试框架,遇到一个烦人的问题, driver.get()不执行完,浏览器页面一直在转圈圈,下面的代码根本就不会执行,耗时一天的时间终于解决了。
driver.get() 方法默认等待页面加载完成,再往下执行。
方法一
设置页面超时时间,超过该时间的时候,就停止加载页面
driver.set_page_load_timeout(2) #设置页面加载超时时间
driver.set_script_timeout(6) #设置脚本执行超时时间
try:
driver.get(base_url) #页面在前面设置的2s内没加载完成时,使用下面的JS强制停止加载
except Exception:
driver.execute_script('window.stop()')
弊端:页面如果没有完全显示出来就停止加载,可能会导致我们脚本所需要的元素无法获取,会直接测试执行失败
方法二
由于get()方法是等待加载完成,才往下执行查找元素,那我们就
from time import sleep
from selenium import webdriver
#1.导包,配置浏览器所需要的能力
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait #导入网页驱动显性等待包
#2.实例化谷歌浏览器配置对象,可以实例化很多浏览器的配置对象,比如EDGE,FIREFOX,IPAD,IPHONE等
desired_capabilities = DesiredCapabilities.CHROME
#3.设置谷歌浏览器配置对象的,页面加载属性为none。等级为normal,eager,none
desired_capabilities["pageLoadStrategy"] = "none"
#4.实例化谷歌浏览器驱动对象时,写入配置参数
driver=webdriver.Chrome(desired_capabilities=desired_capabilities)
print("正在打开网页")
driver.get("https://map.baidu.com")
print("网页打开完成")
try:
e1=WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element(By.CSS_SELECTOR, 'a.close-btn')) #显性等待10s
e1.click()
except Exception as e:
print("报错:没有这个窗口!")
sleep(5)
driver.quit()
注意:使用这种方法时,配合元素等待方法。隐性和显性等待都行。效果最佳!
normal | 等待整个页面加载完毕 |
eager | 等到初始 HTML 文档完全加载和解析完毕,并放弃加载样式表、图像和子帧 |
none | 只等待初始页面下载完成 |
方法三
跟方法二差不多,也是设置页面加载方式。只不过导入的包不一样而已。
from selenium import webdriver
# 1.导入谷歌浏览器选项配置包
from selenium.webdriver.chrome.options import Options
# 2.实例化选项配置对象
options = Options()
# 3.配置页面加载策略,normal,eager,none。
options.page_load_strategy = 'eager'
# 4.实例化谷歌浏览器驱动时,定入配置参数
driver=webdriver.Chrome(options=options)
总结:使用方法二和方法三,
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END