51Testing软件测试论坛

标题: 【求解】python+selenium显性等待和强制等待问题? [打印本页]

作者: 黑盒测试    时间: 2017-3-14 15:33
标题: 【求解】python+selenium显性等待和强制等待问题?
为什么我黄色部分代码已经加了显性等待了,每次执行到这还是报错?
当我加上紫色部分的强制等待3秒就可以了,显性等待和强制等待实际分别适用瑜那些地方呢?


def TimeWait(driver,time,element):#显性时间等待
    return WebDriverWait(driver,time).until(element)


#切到投票页面  TimeWait(driver,10,lambda driver:driver.find_element_by_xpath('//div[@class="fg-nav-li"]')).click()
#输入票数量   driver.find_element_by_xpath('//input[@id="sy_giftnum"]').send_keys('1')
#点击投票      driver.find_element_by_xpath('//span[@id="sy_vote"]').click()
                      print('投票后积分:'+number.text)
                      time.sleep(2)  #投票成功会弹出悬浮提示故需要强制等2秒,截图才能截到,要不然截不到悬浮提示
                     driver.get_screenshot_as_file("e:\\toupiao.jpg")#投票成功截图
time.sleep(3)
#关闭按钮    TimeWait(driver,10,lambda driver:driver.find_element_by_xpath('html/body/div[1]/div/div[1]/i')).click()
driver.switch_to.default_content()


作者: 若尘_51    时间: 2017-3-14 16:25
【个人理解,仅供参考】

通常来说,这两种方式比较少用,隐式等待更为常用:     

(1)隐式等待:当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,但只要页面加载完成则往下执行(灵活),
而超出设定时间后则抛出找不到元素的异常,隐性等待对整个driver的周期都起作用,所以只要设置一次即可

【弊端】:那就是程序会一直等待整个页面加载完成,也就是一般情况下只有浏览器标签栏那个小圈不再转,
才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍得等到页面全部完成才能执行下一步;

(2)time.sleep强制等待:基本不用,一般切换页面或打开新页面,象征性地用一下,增加稳定性(个人感觉)。还有调试脚本的时候也会用一下

(3)显示等待WebDriverWait():webdriver的针对某个元素的明确等待,在给定的时间内去查找元素,如果没找到则超时,抛出异常
适用场合:当页面加载很慢时,推荐使用显示等待:等到需要操作的那个元素加载成功之后就直接操作这个元素,不需要等待其他元素的加载,弥补隐式等待的不足

( 隐性等待和显性等待可以同时用,注意:等待的最长时间取两者之中的大者)
作者: 黑盒测试    时间: 2017-3-14 18:06
若尘_51 发表于 2017-3-14 16:25
【个人理解,仅供参考】

通常来说,这两种方式比较少用,隐式等待更为常用:     

谢谢   若尘_51
恩 我大概知道3者的区别了
但是我看视频都是重点讲的:显示等待WebDriverWait(),而且问了好几个人都说这个常用点,我觉得针对不同的场景采用不用






欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2