selenium中,经常会出现元素还没有加载出来,浏览器找不到元素而报错的问题,设置等待是保证脚本运行的一个重要手段,常用的等待有三种--强制等待、隐式等待、显示等待。
1.强制等待
time.sleep(10)
必须等待10s,不太实用
2.隐式等待
driver.implicitly_wait(最大等待时间X秒)
设置一次,则全局(对应浏览器的整个生命周期内)生效,所以一般在打开浏览器后立即设置。
缺点:实际操作中你需要定位的元素已经加载完成,但其他元素未加载完成,也只能继续等待,相对(显式等待)来说会浪费时间。
3.显式等待(推荐)
1.直接用
WebDriverWait(driver,20,0.5).until(可执行方法,超时后返回的信息)
2.结合EC(expected_conditions)模块
WebDriverWait(driver,20,0.5).until(EC.方法)
显示等待的方法:
'''判断title是否是一致,返回布尔值''' WebDriverWait(driver,10,0.1).until(EC.title_is("title_text")) '''判断title是否与包含预期值,返回布尔值''' WebDriverWait(driver,10,0.1).until(EC.title_contains("title_text")) '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回元素''' WebDriverWait(driver,10,0.1).until(EC.presence_of_element_located((locator))) '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0''' WebDriverWait(driver,10,0.1).until(EC.visibility_of_element_located((locator))) '''判断元素是否可见,如果可见就返回这个元素''' WebDriverWait(driver,10,0.1).until(EC.visibility_of(driver.find_element(locator))) '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表''' WebDriverWait(driver,10,0.1).until(EC.presence_of_all_elements_located((locator))) '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表''' WebDriverWait(driver,10,0.1).until(EC.visibility_of_any_elements_located((locator))) '''判断指定的元素中是否包含了预期的字符串,返回布尔值''' WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element((locator),'预期的text')) '''判断指定元素的value属性值中是否包含了预期的字符串,返回布尔值(注意:只是value属性)''' WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element_value((locator),'预期的text')) '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False''' WebDriverWait(driver,10,0.1).until(EC.frame_to_be_available_and_switch_to_it(locator)) '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素''' WebDriverWait(driver,10,0.1).until(EC.invisibility_of_element_located((locator))) '''判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False''' WebDriverWait(driver,10,0.1).until(EC.element_to_be_clickable((locator))) '''等待某个元素从dom树中移除''' WebDriverWait(driver,10,0.1).until(EC.staleness_of(driver.find_element(locator))) '''判断某个元素是否被选中了,一般用在下拉列表''' WebDriverWait(driver,10,0.1).until(EC.element_to_be_selected(driver.find_element(locator))) '''判断某个元素的选中状态是否符合预期''' WebDriverWait(driver,10,0.1).until(EC.element_selection_state_to_be(driver.find_element(locator),True)) '''判断某个元素的选中状态是否符合预期''' WebDriverWait(driver,10,0.1).until(EC.element_located_selection_state_to_be((locator),True)) '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容''' accept = WebDriverWait(driver,10,0.1).until(EC.alert_is_present())
- Unittest Selenium Python3 Python 007unittest selenium property python3 unittest selenium python3 python unittest selenium python3环境 unittest selenium元素python3 webdriverwait unittest selenium python3 unittest selenium python3页面 htmltestrunner unittest selenium python uiautomation unittest桌面python3 selenium4 selenium python3文件 selenium4 selenium python3 jenkins