【发布时间】:2019-06-12 15:23:44
【问题描述】:
我想创建一个 java 方法来检查是否存在实际的 selenium webelement。
重要的是,我需要创建一个方法,该方法将 Webelement 作为参数,而不是 By 或 String id。而且我想避免 try-catch 解决方案,如果发生 NoSuchElementException,它将返回 false。
public boolean isElementExists(WebElement element) {
//TODO Implement...
}
例子:
foo.html
<!DOCTYPE html>
<html>
<body>
<button id="button1" type="button">First button</button>
</body>
</html>
FooPage.java
public class FooPage {
@FindBy(how = How.ID, using = "button1")
public WebElement fistButton;
//Missing button
@FindBy(how = How.ID, using = "button2")
public WebElement secondButton;
}
FooPageTest.java
public class FooPageTest {
public void test(FooPage page) {
page.firstButton.click(); // OK
page.secondButton.click(); // NoSuchElementException
//So I need to check if element exists in this class.
//I can access here to the FooPage, the webelement to check, and to the driver.
}
}
【问题讨论】:
-
据我所知,您的方法不起作用,因为您点击
WebElement element=driver.findElement(XXX)line selenium 的那一刻将尝试返回页面上不存在的元素。因此,如果页面上不存在元素,您将在点击isElementExists方法之前得到NoSuchElement异常。 -
如果您仍然想坚持自己的想法,那么您可以采用这种方法 - 使用
findElements,然后将其作为参数发送到isElementExists(listofEelement, indexOfInteresedElement)方法。 -
问题是,我有一个很大的 UI 测试系统,我必须在很多时候修复它。并且已经有 Page 对象,它们具有 WebElement 属性。这些属性至少使用了 1000 个位置,并且没有检查这些属性是否存在。我想创建一个 Util 类,它会有这个方法,我会调用它。但是在大多数地方,我没有 ID,或者关于元素属性的任何信息,只有 WebElement 和 Page 对象,我必须以某种方式处理它。所以在这种情况下我可能无法使用 findElements。
-
您最好创建一个 WebElement 接口的自定义实现,该接口包装另一个 WebElement,以便捕获在元素不存在时抛出的 NoSuchElementException。你确定你不是在寻找一些东西来测试一个元素是否是你可以与之交互的东西吗?这是一个完全不同的问题要解决。
-
也许吧。所以实际的系统不会检查一个元素是否存在,所以它只是尝试例如单击不存在的按钮并将文本发送到不存在的输入元素。在这个方面,我可以说我不能与他们互动,但如果你的意思是,元素存在,它只是被禁用或任何东西,那么不,这不是我想要的。是否有意义?我试着很快在这里写一个例子。