17、Selenium + Python 实现 UI 自动化测试-等待

原文地址:http://blog.csdn.net/huilan_same/article/details/52544521

作者这篇文章写的很详细,很经典,就不再重新写了。


总结一下:

1、强制等待——sleep(xxx)

不管如何,都等待xxx秒,才继续执行下面的代码。

适合调试代码用。


2、隐性等待——implicitly_wait(xxx)

隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了


3、显性等待

显性等待某个元素,元素找到了,即便页面其它的 js 等文件加载不完,也执行。显性等待效果好,但是操作较复杂,一般来说,掌握好前两种等待方法,就能解决掉大部分的问题。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(20)

driver.get('http://www.baidu.com/')
locator = (By.LINK_TEXT,'地图')
try:
    WebDriverWait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator))
    driver.find_element_by_link_text('地图').click()
finally:
    driver.quit()


补充一点:

有这样一个页面xxx,打开后元素a,需要5秒才能加载出来,请问下面的代码是否能执行成功?

1、 使用implicitly_wait(20)

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(20)
driver.get("xxx")
driver.find_element_by_link_text('元素a').click()
driver.quit()


2、使用implicitly_wait(20)

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(20)
driver.get("xxx")
ele = driver.find_element_by_link_text('元素a')
ele.click()
driver.quit()
这个代码能执行成功吗?


第一个代码,定位元素,然后点击click

第二个代码,先把元素赋值给变量,然后变量使用click方法


代码1执行成功

代码2执行失败


分析:

代码1:implicitly_wait(20) ,对某个元素执行操作的时候,如果找不到元素就等待,找到了就执行操作,等20秒还找不到才报错。

代码2:赋值语句,不是对元素进行操作,找不到元素,赋值直接失败,报错。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页