我目前正在尝试使用selenium进行一些用户界面测试,我遇到了这个不错的方法(不知道我从哪里得到它...),这假设要照顾不存在的元素和隐藏的元素... < / p>
问题在于第二个问题:即使元素未显示/隐藏(可见性:隐藏),该方法仍会返回'true'
public boolean elementExists(By locator, WebDriver driver) {
WebElement foo = null;
try {
foo = this.getElementByLocator(locator, 10, driver);
} catch (TimeoutException te) {
System.out
.println("Timeout - Dieses Element konnte nicht gefunden werden: "
+ locator.toString());
return false;
}
catch (ElementNotVisibleException env) {
System.out
.println("Dieses Element wurde gefunden, ist aber nicht sichtbar: "
+ locator.toString());
return false;
}
if (foo == null ) {
return false;
} else {
return true;
}
}
public WebElement getElementByLocator(By locator, int timeout,
WebDriver driver) {
System.out.println("Rufe Methode getElementByLocator: "
+ locator.toString());
int interval = 5;
if (timeout <= 20)
interval = 3;
if (timeout <= 10)
interval = 2;
if (timeout <= 4)
interval = 1;
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(interval, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class,
StaleElementReferenceException.class);
WebElement we = wait.until(ExpectedConditions
.presenceOfElementLocated(locator));
return we;
}
任何人都可以告诉我如何修改它以便能够识别出隐藏的现有元素?提前谢谢!
答案 0 :(得分:1)
ExpectedConditions.presenceOfElementLocated
检查页面的DOM上是否存在元素。这并不一定意味着该元素是可见的。
尝试使用visibilityOfElementLocated代替。这将检查页面的DOM上是否存在元素并且可见。可见性意味着不仅要显示元素,还要使其高度和宽度大于0。
更多here
catch (ElementNotVisibleException env) {
我不认为这是你的情况。无论如何,如果你要与它进行交互并且元素将被隐藏 - 这将被抛出,但不会被查找。
编辑: 为什么这么多代码的利益如此之少?这也是一样的:
public boolean elementExists(By locator, WebDriver driver){
return (new WebDriverWait(driver, 60)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class)
.until(ExpectedConditions.visibilityOfElementLocated(locator))) != null;
}