testng如何实现等待(软等待、智能等待)
2017-06-22 16:07
260 查看
今天给大家介绍一种等待方法,我们之前写的等待,如:Thread.sleep(1000);我们称之为硬等待,也就是说你设置等待多长时间就是多长时间,这种等待对于做自动化来说,特别浪费时间,我们一般很少用到。
假如在做自动化过程中,有的页面可能由于服务器或网速等等原因你是不知道它什么时候才会加载出来的,这种情况你如果使用硬等待,用例失败的几率特别大,所以这种方法就不可取了,我今天要给大家介绍一种智能等待的方法,也就是说用上这个方法之后,它会在你设定的超时范围内去轮询等待界面上是否出现了这个元素,一旦出现立刻执行动作;如果在指定超时范围之内没有出现,则抛出异常。这样就大大减少了我们的等待时间,节约时间就是节约成本!
一、首先要写一个判断元素是否存在的方法,代码如下:
ps:waitDriver=driver(这个driver是我操作用到的driver),要把你的driver传给waitDriver,否则无法实现控制;这里我给的超时时间waitTime是20s
二、实现智能操作,举例如下:
ps:waitElementIsEnabledBy是我们判断元素是否存在的方法,以上是我判断一个退出按钮是否存在,如果存在立刻执行点击动作,如果不存在,超出20s后则抛出异常,返回false
提示:只需要在你不知道某个页面需要加载多长时间的地加此等待就可以,也可以把其他操作的硬等待也用此方法替换掉,提升自动化的速度和质量,节约时间和成本!
假如在做自动化过程中,有的页面可能由于服务器或网速等等原因你是不知道它什么时候才会加载出来的,这种情况你如果使用硬等待,用例失败的几率特别大,所以这种方法就不可取了,我今天要给大家介绍一种智能等待的方法,也就是说用上这个方法之后,它会在你设定的超时范围内去轮询等待界面上是否出现了这个元素,一旦出现立刻执行动作;如果在指定超时范围之内没有出现,则抛出异常。这样就大大减少了我们的等待时间,节约时间就是节约成本!
一、首先要写一个判断元素是否存在的方法,代码如下:
// 判断元素是否可用 public static Boolean waitElementIsEnabledBy(By by) { try { WebDriver waitDriver = driver; long waitTime = 20; waitDriver.manage().timeouts().implicitlyWait(waitTime, TimeUnit.SECONDS); (new WebDriverWait(waitDriver, waitTime)).until(ExpectedConditions.elementToBeClickable(by)); return true; } catch (Exception e) { return false; } }
ps:waitDriver=driver(这个driver是我操作用到的driver),要把你的driver传给waitDriver,否则无法实现控制;这里我给的超时时间waitTime是20s
二、实现智能操作,举例如下:
waitElementIsEnabledBy(By.xpath("//*[@id='allheader']/div/div[1]/div/div/div[2]/a")); driver.findElement(By.xpath("//*[@id='allheader']/div/div[1]/div/div/div[2]/a")).click();// 点击退出
ps:waitElementIsEnabledBy是我们判断元素是否存在的方法,以上是我判断一个退出按钮是否存在,如果存在立刻执行点击动作,如果不存在,超出20s后则抛出异常,返回false
提示:只需要在你不知道某个页面需要加载多长时间的地加此等待就可以,也可以把其他操作的硬等待也用此方法替换掉,提升自动化的速度和质量,节约时间和成本!
相关文章推荐
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- 如何实现winform客户端智能更新
- 什么是智能电网以及如何实现智能计表?
- CIO们该如何借助商业智能实现企业核心管理
- Selenium-webdriver系列教程(九)————如何智能的等待页面加载完成
- 如何在web上实现等待提示。
- 如何实现“程序正在运行,请等待” VBA
- 如何实现主线程需要等待子线程的结果,然后才能往下执行。
- 举例说明如何实现使用线程来实现UC浏览器的等待页面的效果
- 问题:如何实现java主线程等待子线程执行完毕之后再执行?
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- 如何实现拨通电话,IVR提示,转人工按1,转传真按2,繁忙时自动转到队列,并播放音乐,并提示按1继续等待,按2退出。
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 如何实现多个线程写、一个线程读的队列,并且所有线程间不需要等待同步
- 什么是智能电网以及如何实现智能计表?
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- 如何利用AJAX实现,数据正在载入,请等待…
- 数据管理的智能趋势(2):如何实现高效的数据管理
- Wi-Fi智能插座拆解:如何实现远程开关
- 智能指针里弱引用应该如何实现?(WeakReference/WeakPtr<T>)