如何创建一种实用方法来检查PageObjectModel模式中网页上的webElement是否存在

时间:2019-06-10 03:35:18

标签: selenium-webdriver

我想创建一个实用程序方法来检查POM框架中webPage上的webElement是否存在。我可以使用driver.findelements(By。(xpath)/ Id / css stc)的逻辑并检查size。如果size> 0,则存在element。但是在这种情况下,我无法将PageFactory Webelement作为参数传递,因为findelements仅将String作为参数,而不将webelement作为参数。因此,我想将pagefactory Webelement传递给实用程序方法,并检查是否存在Webelement

1 个答案:

答案 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()