我希望硒等待3分钟,然后刷新页面直到找到一个元素(“下载”按钮)。我尝试使用下面的代码,但是它不起作用。
注意:我正在上传一个zip文件,有时需要几秒钟的时间才能上传,有时需要3分钟。当文件在几秒钟内上传后,下面的代码可以正常工作。 zip文件需要较长时间上传时,此功能不起作用。
有人可以在这方面帮助我。
boolean displayed = false;
do {
try {
displayed = driver1.findElement(By.xpath("//*[@id=\"app\"]/main/div[1]/div/div/div/div[2]/table/tbody/tr[1]/td[4]/a")).isDisplayed();
} catch (NoSuchElementException e) {
System.out.println(e);
driver1.navigate().refresh();
}
} while (!displayed);
driver1.findElement(By.xpath("//*[@id=\"app\"]/main/div[1]/div/div/div/div[2]/table/tbody/tr[1]/td[4]/a")).click();
答案 0 :(得分:0)
您可以使用元素列表的大小,而不是使用.isDisplayed()方法,如果该大小大于0,则单击该元素。
例如:
boolean displayed = false;
List<WebElement> element = driver.findElements(By.xpath("//*[@id=\"app\"]/main/div[1]/div/div/div/div[2]/table/tbody/tr[1]/td[4]/a"));
while (!displayed) {
if (element.size() > 0) {
// Element is found so set the boolean as true
displayed = true;
// Click on the element
element.get(0).click();
} else {
// Adding a static sleep of 10 seconds, this else condition can be removed also
Thread.sleep(10000);
}
}
答案 1 :(得分:0)
您提到过,就像“直到找到一个元素(下载按钮)”一样。因此需要在此处满足条件...因此,我们可以使用硒提供的一种等待功能
我们有3种硒等待类型,1)隐式等待2)显式等待,3)流利等待。
1)使用隐式等待,代码可以是:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
用法::如果我们希望WebDriver在查找一个或多个元素(如果它们不立即可用)时轮询DOM一定时间。默认设置为0。设置后,将在WebDriver对象实例的生存期内设置隐式等待。
但这不是一个好习惯,我个人不建议
和
2)使用显式等待,代码可以是:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.id("download_button_id")));
用法::显式等待是您定义的代码,用于等待特定条件发生后再继续执行代码。默认情况下,WebDriverWait每500毫秒调用ExpectedCondition,直到成功返回。如果元素需要很长时间才能加载。另外,用于检查元素的属性(状态,可点击性等)。
3)使用Fluent等待,代码可以是:
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>()
{
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
用法: 流利等待是另一种显式等待,您可以定义轮询并忽略异常,以在找不到元素的情况下继续执行脚本。 当您尝试测试每x秒/分钟后可能出现的元素的存在时(仅举一个例子,这是我对可以在何处使用这种东西的猜测)
选择合适的选项,您可能需要流利的等待时间