Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium FluentWait和元素不可见异常_Java_Selenium_Testing - Fatal编程技术网

Java Selenium FluentWait和元素不可见异常

Java Selenium FluentWait和元素不可见异常,java,selenium,testing,Java,Selenium,Testing,我尝试使用FluentWait代替睡眠,这是我的第一次练习。首先,也是最重要的是,我做得对吗?其次,我通过了两个元素,所以我认为它是可行的(PaymentMethod按钮和CheckOut按钮)。在我实现FluentWait之前,它不会找到它们。最后,它将找不到第三个(backToDesktop按钮)元素。保持抛出元素不可见,尽管我添加了wait.ignore(elementNotVisibleException.class) FluentWait wait=newfluentwait(logi

我尝试使用FluentWait代替睡眠,这是我的第一次练习。首先,也是最重要的是,我做得对吗?其次,我通过了两个元素,所以我认为它是可行的(PaymentMethod按钮和CheckOut按钮)。在我实现FluentWait之前,它不会找到它们。最后,它将找不到第三个(backToDesktop按钮)元素。保持抛出元素不可见,尽管我添加了wait.ignore(elementNotVisibleException.class)

FluentWait wait=newfluentwait(login.getDriver());
wait.withTimeout(5,TimeUnit.SECONDS);
wait.pollingEvery(250,时间单位为毫秒);
忽略(NoSuchElementException.class);
忽略(ElementNotVisibleException.class);
WebElement paymentMethod=wait.until(新函数(){
公共WebElement应用(WebDriver){
返回login.getDriver().findElement(By.xpath(“/*[@id='paymentMethodHolder']/div[1]/div[1]/button”);
}
});
paymentMethod.click();
System.out.println(“找到付款方法按钮”);
WebElement checkOut=wait.until(新函数(){
公共WebElement应用(WebDriver){
返回login.getDriver();
}
});
签出。单击();
System.out.println(“找到KINNITA按钮”);
WebElement backToDesktop=wait.until(新函数(){
公共WebElement应用(WebDriver){
返回login.getDriver().findElement(By.className(“模式按钮文本”);
}
});
返回到desktop。单击();
System.out.println(“找到返回到desktop按钮”);

FluentWait
是一种自定义等待。在大多数情况下,你不应该需要它。您应该始终从
WebDriverWait
ExpectedConditions
开始,如果这不起作用,那么可以调查
FluentWait
。我的猜测是,像下面这样简单的东西会适合你。这只是一个例子。您应该查看您可以等待的所有不同条件。最常见的可能是等待元素可见或可单击

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someId")));

元素在UI上可见吗?@xyz它在到达该部分时关闭,但是的,它应该可见。很少增加。这就是我所做的,它似乎在工作:wait.ignoreding(NoSuchElementException.class,ElementNotVisibleException.class);忽略(WebDriverException.class);这是说我用正确的方法做的,还是只是一个幸运的巧合?谢谢!我认为这种方法可能根本不起作用。因为现在我得到了元素不可见异常,尽管我有wait.ignoring(ElementNotVisibleException.class)。
wait.ignoring(ElementNotVisibleException.class)
意味着即使抛出ElementNotVisibleException,selenium也会继续查找元素。如果元素不可见,它将无法获取该元素,无论您添加到忽略列表中的异常是什么。@xyz是的,我知道,但它在第一次通过找到的第二个按钮时抛出该异常。它不会等待5秒,而是等待。withTimeout(5,TimeUnit.seconds);此异常立即抛出。如果您发现此(或任何)答案有用,请向上投票。如果这回答了你的问题,请接受它作为答案。谢谢是的。尽管“感谢您的反馈!声誉低于15的人所投的票会被记录下来,但不会改变公开显示的帖子分数”。这一切都很好。我只是想与网站更新的人分享这些信息(低代表性)。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someId")));