概述:我已经在Java中准备了Selenium Web驱动程序脚本中的自动化脚本,该脚本将登录到网站并自动进行选择,一旦选择完成,它将运行报告。< / p>
我想要的是什么:我在优化自动化脚本时遇到了问题。
简要说明:实际上我熟悉我们在Selenium中使用的各种等待,但所有那些等待,即隐含,明确或流畅的等待都无法帮助我制作代码更优化。目前我在各处都使用Thread.sleep()方法,以便完全运行脚本而不会失败,但我知道这不应该是最佳实践,因为有时元素加载速度快,有时慢,因为我脚本执行需要很长时间或基于Element可用性失败。我为Webdriver等待创建了一个单独的方法,我可以在我的主脚本中需要时调用各种webelements但是这种方法有时也可以工作或者有时甚至没有通过800第二个作为等待的时间段,但如果我使用Thread.sleep(5000)它将工作没有任何问题不确定为什么??
我希望有一个单独的等待方法,可以在需要时在主脚本中调用,我希望我们的脚本在我们看到的时候能够完美地工作,就像我们在与任何网络交互时所做的一样。 / p>
注意: 我已经尝试了ExpectedCondition方法,例如elementtobeclickable,visibilityOfElementLocated,presenceofElementLocated,所有这些方法在某些时候都有效,但有时却不会。
我创建的单独等待方法
public static WebElement waiting(WebDriver driver,String path){
WebDriverWait wait = new WebDriverWait(driver,800);
WebElement element=wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(path)));
return element;
}
我称之为此方法的一段主要代码。
if(nam.equals("Some name"))
{
WebElement e=driver.findElement(By.xpath("1st Webelement path"));
e.click();
System.out.println("Value clicked under First Drop Down is:"+e);
Listing.waiting(driver,"2nd WebElement xpath").click();
//Thread.sleep(5000);
//driver.findElement(By.xpath("2nd WebElement xpath")).click();
System.out.println("Second Dropdown clicked");
}
当我评论Thread.sleep()然后它将抛出ElementNotFound异常,即使我在Webdriver等待方法中使用了800秒,但是当我从Thread.sleep()方法中删除注释时它将起作用。
请帮助我获得可重复使用且有用的等待方法,我可以在主代码中多次调用。
先谢谢!!
答案 0 :(得分:0)
这通常适合我(不过FluentWait):
WebDriverWait wait = new WebDriverWait(driver, TIMEOUT);
ExpectedCondition elementIsDisplayed = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver arg0) {
try {
webElement.isDisplayed();
return true;
}
catch (NoSuchElementException e ) {
return false;
}
catch (StaleElementReferenceException f) {
return false;
}
}
};
wait.until(elementIsDisplayed);
当然,将TIMEOUT设置为您要等待找到元素的时间量(以秒为单位)。