我想创建一个实用程序方法来检查POM框架中webPage上的webElement是否存在。我可以使用driver.findelements(By。(xpath)/ Id / css stc)的逻辑并检查size。如果size> 0,则存在element。但是在这种情况下,我无法将PageFactory Webelement作为参数传递,因为findelements仅将String作为参数,而不将webelement作为参数。因此,我想将pagefactory Webelement传递给实用程序方法,并检查是否存在Webelement
答案 0 :(得分:0)
我假设您正在使用Java来获得此答案,并且您拥有类似如下的代码:
@FindBy(id = "foo")
WebElement element;
您将发现创建执行此操作的实用程序方法是有问题的,因为WebElement
对象没有提供提取用于生成它的定位符的方法。您可以考虑几种选择。
选项1
更改您的PageFactory实现以生成一个WebElement
列表,而不是一个WebElement
@FindBy(id = "foo")
List<WebElement> allElements;
这样做的不利之处在于,当在页面对象中使用初始元素时,显然需要执行allElements.get(0)
才能使该元素中的初始元素消失。
选项2
从PageFactory切换为使用Query对象。这是我写的一个小型库,用于解决Java PageFactory遇到的各种问题。代码为available on Github,该库可在Maven Central中使用(有关用法说明,请参见Github上的README.md,设置与PageFactory非常相似)。这将使您可以像这样定义元素:
Query query = new Query().defaultLocator(By.id("foo"));
您现在可以使用上述对象提取WebElement或Webelements列表:
WebElement soloElement = query.findWebElement();
List<WebElement> allElements = query.findWebElements();
因此对于您的特定问题,您将可以执行如下检查:
if(query.findWebElements().size() > 0){
//Do Something
}
它还可以让您拉出原始定位符以用于实用程序功能,或在需要时进行显式等待
By originalLocator = query.by()