更多课程 选择中心

软件测试培训
达内IT学院

400-111-8989

在软件测试领域,怎么理解自动化测试中的元素等待?

  • 发布:gentelman_邵
  • 来源:51Testing软件测试网
  • 时间:2018-06-04 19:08

在软件测试领域,怎么理解自动化测试中的元素等待?

在软件测试中,我们会遇到很多方法、种类、概念等,今天我们要带大家了解的是自动化测试中的元素等待的相关知识,不清楚的赶紧来了解一下吧:

我们在做web网站自动化测试的过程中,会经常遇到web应用程序使用了AJAX技术。当浏览器加载页面的时候,而页面上的元素还未同时被加载完成,那么我们此时进行元素的定位往往会出现错误,影响我们在自动化测试工作进程。这样在加载某个元素延迟而造成了ElementNotVisibleException的报错,就会降低自动化脚本的稳定性。如何解决这个问题呢?我们可以通过设置元素等待改善这种问题造成的负面影响。我们可以描绘成这种场景,程序员和女友约好吃西餐,结果程序员在西餐厅吃的美滋滋回来后看到女友还在梳妆台化妆,好奇的问怎么还在化妆没有出门呢?女友心里顿时无名的火涌上心头,欺负我慢不和你谈对象了,抛个异常跟你分手。

webdriver为我们提供了三种等待方法:

1、强制等待

第一种是办法简单粗暴就是强制等待sleep(),强制让程序员等待xx时间,不管女朋友能不能来到约会地点,还是已经提前到了,都必须等待xx时间

1 from time import sleep

2 from selenium import webdriver

3 url='https://www.baidu.com/'

4 driver=webdriver.Chrome()

5 driver.get(url)

6 sleep(3)

7 print(driver.current_url)

8 driver.quit()

这种叫强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

2、隐性等待

第二种方法就比强制等待方法较细腻人性化了,implicitly_wait(xx),我们可以想象成这样的场景:程序员和女友约定好,不论程序员什么时候到了约定地点,都必须要等女友一家子xx秒,如果女友一家子这段时间内来了,好的和女友手挽手去西餐厅共进晚餐,但是如果女友在规定的时间内没赶到,则程序员自己去,结果自然就是女友发飙给你抛个异常恶心一下。

1 from selenium import webdriver

2 url='https://www.baidu.com/'

3 driver=webdriver.Chrome()

4 driver.implicitly_wait(20)#隐性等待,最长等待20s

5 driver.get(url)

6 print(driver.current_url)

7 driver.quit()

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。但是这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是我们可以看到浏览器标签栏那个小圈不再转,才会执行下一步,通常页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,得等到页面全部完成才能执行下一步,那我们需要主题元素出现就可以下一步该如何去做呢,那就要看selenium提供的另一种等待方式——显性等待wait了。这里需要强调的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

3、显性等待

第三种方法就是显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件来进行灵活地等待了。它主要的意思是:程序每隔xx秒看以下条件是否满足,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。我们可以想象成这样的场景:程序员和女友约定好,不论程序员什么时候到了约定地点,都必须要等女友一家子xx秒,而与第二个场景不同的是程序员隔一段时间观望主体女友是否出现,若来了程序员就不需要再等待,直接拉着女友手挽手去西餐厅共进晚餐不用管女友一家子了。

1 from selenium import webdriver

2 from selenium.webdriver.support.wait import WebDriverWait

3 from selenium.webdriver.support import expected_conditions as EC

4 from selenium.webdriver.common.by import By

5 url='https://www.baidu.com/'

6 driver = webdriver.Chrome()

7 driver.implicitly_wait(20) # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者

8 driver.get(url)

9 locator = (By.ID, 'su')

10 try:

11 WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

12 finally:

13 driver.close()

上例中,我们设置了隐性等待和显性等待,在其他操作中,隐性等待起决定性作用,在WebDriverWait..中显性等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的大者,如果隐性等待时间 > 显性等待时间,则该句代码的最长等待时间等于隐性等待时间。

通过本文的阅读,你已经了解了自动化测试中的元素等待,webdriver为我们提供的三种等待方法,如果你还有不理解的地方,或者你还有其他软件测试相关的问题,欢迎你来达内软件测试培训机构进行咨询。

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:软件测试培训之测试用例正规化
下一篇:完善软件测试流程,保证测试质量

你知道吗?做软件测试不一定需要精通代码!

软件测试人员不需要懂代码,这是一个伪命题!

如何设计登录测试的设计用例?

软件测试必备的数据库知识有哪些?(终)

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

陕西省

湖南省

贵州省

云南省

广西省

海南省