发布: 更新时间:2022-09-22 23:04:28
最近在编写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)
总结:使用方法二和方法三,
原神3.8心海武器推荐 原神3.8心海带什么武器
阴阳师寻迹骰怎么获得 阴阳师寻迹骰获得方法
王者荣耀妄想都市观光怎么获得 王者荣耀妄想都市观光活动
阴阳师新召唤屋和幕间皮肤效果怎么样 阴阳师新召唤屋和幕间皮肤获取方法介绍
羊了个羊7.26攻略 羊了个羊7月26日怎么过
崩坏星穹铁道求不得成就攻略介绍 崩坏星穹铁道求不得成就怎么获得
崩坏星穹铁道去吧阿刃成就攻略介绍 崩坏星穹铁道去吧阿刃成就怎么获得
时空中的绘旅人罗夏生日有什么复刻 绘旅人罗夏生日礼包复刻一览
银河境界线武器强度怎么看 银河境界线武器强度排行攻略
阴阳师红蛋蛋限时福利怎么获得 阴阳师再结前缘版本福利介绍