我现在和自动化一起工作,一次又一次面临一个问题。一般来说,我的代码中有逻辑,我需要检查一个元素的存在,下一步将取决于检查的结果。但是硒的基本工具只返回布尔值true,否则NoSuchElementException。但是我需要“假”。
与我之前的项目一样,我现在使用简单包装器来解决这个问题:
private boolean isDisplayedOnPage(WebElementFacade wef){
try{
return wef.isDisplayed();
} catch (NoSuchElementException nsee){
return false;
}
}
它工作得很好,但是异常的使用让我困惑。此外,我读到过“等待”,但它也没有返回false,只是让我忽略了异常。硒中有内置的工具来解决这个问题吗?或者也许有人可以提供一个更优雅的方法来解决它?
一个不干净的解决方法可能是检查DOM中是否有一个唯一的字符串来表示您的WebElement,然后如果可以找到它,则写入布尔值。
此循环将每秒检查DOM中的字符串60次,如果未找到任何内容,则刷新页面:
for (int i= 0; i <60; i++){
String pageSource = browser.getPageSource().toString();
boolean elementThere = pageSource.contains("uniqueStringOfElement");
if (elementThere){
browser.WebElement.click()
break;
}
else {
Thread.sleep(1000);
browser.navigate().refresh();
}
}
Boolean bool = my_driver.findElements(By.id("my element id")).size()>0;
这将帮助你。
原始WebDriver API的核心原则之一是期望用户知道被自动化页面的DOM状态。这意味着,在API的逻辑中,使用不存在的元素的定位器调用findElement是一种例外情况,使得抛出异常完全合法。虽然有人可能会认为API行为中内置的期望是错误的,但这超出了这个答案的范围。如果您需要布尔逻辑来判断元素是否存在,那么您需要一个包装器方法,正如您已经发现的那样。在该包装器方法中,您有两个选择:
>
使用findElement
并捕获NoSuchElementException
。请注意,使用WebDriverWatch
会隐式为您捕获此异常,因此是语义等价物。
使用findElements(注意“s”),如果元素不存在,则返回空列表而不引发异常。
我正在使用Selenium(Java版本)测试一个基于OpenLayers的API。 我想测试一个使用的功能。控制修改功能。我想单击绘制的特征(SVG),然后拖动并检查它们是否存在、可见或隐藏。 我已经画了一个多边形,并且选择了它。见下图: 这些SVG元素的HTML如下所示: 假设我想选择红点。 我试过: 但是它总是返回一个空列表。 我做错了什么?有人能帮我吗? 多谢了。 编辑1-功能:垂直显示可
本文向大家介绍iframe父页面如何获取子页面的元素?相关面试题,主要包含被问及iframe父页面如何获取子页面的元素?时的应答技巧和注意事项,需要的朋友参考一下 在父页面监听 onmessage,子页面 postMessage。 $('iframe')[0].contentWindow.document.getElementById document.frames['xx'].document.
目前,我正在尝试使用SeleniumWebDriver捕获一个屏幕截图。但我只能获得整个页面的屏幕截图。然而,我想要的只是捕获页面的一部分,或者基于ID或任何特定元素定位器捕获特定元素。(例如,我希望用image id=“Butterfly”捕捉图片) 有没有办法按所选项目或元素捕获屏幕截图?
本文向大家介绍如何用jst获取DOM元素在页面中的绝对位置?相关面试题,主要包含被问及如何用jst获取DOM元素在页面中的绝对位置?时的应答技巧和注意事项,需要的朋友参考一下 递归获取 参考
在端口20436上启动ChromeDriver(V2.9.248315)线程“main”org.openqa.selenium.noSuchelementException异常:没有这样的元素 (会话信息:chrome=53.0.2785.143)(驱动程序信息:ChromeDriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)(警告:服务器没有
问题内容: 我有一个包含以下内容: 现在我所知道的只是对象名称(统计信息), 不知道 它是 元素编号 还是它的 元素名称 ,因此,有一种方法可以解析该对象,以便我可以获取它的元素并进行处理(例如,约翰罗斯)? 问题答案: 为了以动态方式获取这些项目: