gpt4 book ai didi

html - Selenium 网络驱动程序 : visibilityOfElementLocated although element not visible

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:22 24 4
gpt4 key购买 nike

我遇到的问题是 Firefox Webdriver 无法正确确定元素是否可见:这是我正在使用的代码,它返回元素可见,尽管它不可​​见

wait.ignoring(UnhandledAlertException.class).until(ExpectedConditions.visibilityOfElementLocated(By.id("ad")));

现在,如果我正在测试一个网站,该元素可以在网站的源代码中找到但不可见(例如,因为它前面有另一个元素)怎么办?据我所知,visibilityOfElementLocated 方法只检查元素的宽度和高度是否 >0,不是吗?考虑到糟糕的布局和错误的 z-indexes 等,有没有办法检查该元素对于在网站上冲浪的用户是否真的可见?这真的很棒......

谢谢!

最佳答案

您确定您没有尝试实际测试 presenceOfElementLocated 而不是 visibilityOfElementLocated 吗? visibilityOfElementLocated 仅在您搜索的定位器设置了 display CSS 属性时才有效。有些人通过使用“.findElements(By).size() > 0”来测试“elementExists”,但这里有一个需要处理异常的替代方法。

这可能有点矫枉过正,但您可以编写自己的可见性函数。在此示例中,我将其称为“elementExists()”。它测试“presenceOf”,然后处理“visiblity”异常(如果有的话):

public boolean elementExists( By locator ) {   
WebElement foo = null;
try {
foo = this.getElementByLocator( locator, 10 );
} catch ( TimeoutException te) {
System.out.println("There was a timeout looking for element: " +
locator.toString() );
//Swallow exception: ExceptionUtils.getMessage(te);
return false;
} catch ( ElementNotVisibleException env ) {
System.out.println("The element was found but is invisible: " +
locator.toString() );
//Swallow exception: ExceptionUtils.getMessage(env);
return false;
}
if ( foo == null ) {
return false;
} else {
return true;
}
}

public WebElement getElementByLocator( By locator, int timeout ) {
System.out.println("Calling method 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>( se.myDriver )
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(interval, TimeUnit.SECONDS)
.ignoring( NoSuchElementException.class,
StaleElementReferenceException.class );
WebElement we = wait.until( ExpectedConditions
.presenceOfElementLocated( locator ) );
return we;
}

关于html - Selenium 网络驱动程序 : visibilityOfElementLocated although element not visible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com