黑盒测试 发表于 2017-3-14 15:33:07

【求解】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/div/div/i')).click()
driver.switch_to.default_content()

若尘_51 发表于 2017-3-14 16:25:28

【个人理解,仅供参考】

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

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

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

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

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

( 隐性等待和显性等待可以同时用,注意:等待的最长时间取两者之中的大者)

黑盒测试 发表于 2017-3-14 18:06:17

若尘_51 发表于 2017-3-14 16:25
【个人理解,仅供参考】

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


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

页: [1]
查看完整版本: 【求解】python+selenium显性等待和强制等待问题?