Selenium等待及时间控制浅谈

关于时间控制,我想通常最常见到的就是thread.sleep()方法了。不过这样有很多弊端和风险,为了能合理规避风险以及让代码易于维护,在此总结几种常用方法:
1. 隐性等待:(配合BeforeMethod使用,相当于配置在测试中的参数)
@BeforeMethod
public void beforeMethod() {

driver= new FirefoxDriver();
[b]driver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS );[/b]
driver.manage().window().maximize();

}
2. 基于元素显示的显性等待:(简单以Xpath为例)
public void waitElementToPresent(WebDriver driver, String xpath)
{
for (int second = 1000;; second++)
{
sleep(second);
if (second >= 10000)
System.out.println("timeout : " + xpath);
try
{
if (driver.findElement(By.xpath(xpath))
.isDisplayed())
break;
} catch (Exception e)
{
System.out.println("Exception e");
}
}
}
另外,显示等待也可以配合元素是否显示的判断方法使用
public boolean isElementPresent(By xpath, WebDriver driver) {
// TODO Auto-generated method stub
try {
driver.findElement(xpath);
return true;
}
catch (NoSuchElementException e) {
return false;
}

}
下面,简单用一个例子来应用几种等待和时间控制的方法:
场景A:登陆系统,进入上传文件页面,点击upload上传文件,等待直到上传完成后,退出系统。
[color=green]//登陆系统[/color]
Login(driver);
[color=green]//进入upload页面[/color]
driver.findElement(By.xpath("//*[td='3']")).click();
driver.findElement(By.xpath("//*[@id='btnOrgnizations']/dl/dt")).click();
driver.findElement(By.xpath("//*[td='org-1']")).click();
sleep(2000);
driver.findElement(By.xpath("//*[@class='btnToolbar buttonWithMenu']")).click();
[color=green]//用JSExecutor点击uploadbutton,因为是隐藏元素,所以直接用JS脚本了[/color]
JavascriptExecutor js = (JavascriptExecutor) driver;
String myjs="document.getElementById('ctl00_c_tmmImportationCataloguesList_tmmNewMenu|1').click();";
js.executeScript(myjs);
[color=green]//切换到上传文件的iframe里面,等待直到上传文件的button显示[/color]
driver.switchTo().frame("IFrameNewImportFile");
waitElementToPresent(driver,"//*[@id='ImportationCatalogueNewImportFileControl1_tmmFileXml']");
[color=green]//上传特定路径的xml文件,并点击uploadbutton[/color]
driver.findElement(By.xpath("//*[@id='ImportationCatalogueNewImportFileControl1_tmmFileXml']")).sendKeys("E:\\JAVA testing\\_Testfiles\\Test.xml");
sleep(2000);
driver.findElement(By.xpath("//*[span='Import']")).click();
[color=green]//直到上传完成,退出系统[/color]
for(int second=3000;;second++)
{

if (second >= 4000)
System.out.println("timeout : " + second);
else
{
driver.switchTo().defaultContent();
driver.switchTo().frame("IFrameImportationProgress");
sleep(second);
if (driver.findElement(By.xpath("//*[@class='progressBarArea']/span")).isDisplayed())
{
System.out.println(second+":"+"Under importing now");
continue;
}
else
{
driver.switchTo().defaultContent();
break;
}
Logout(driver);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值