如何使用PageFactory单击从PageObjectClass中的列表<WebElement>中选择的元素?

问题描述 投票:0回答:1

我正在使用 PageFactory 使用页面对象模型。

条件:如果我的搜索项目名称与列表项目匹配,我想单击该项目名称(WebElement)。它在普通的 java 类中工作正常,但在 PageObjectModel 中我想我在这里遗漏了一些东西。

页面对象类中的元素声明

@FindBy(xpath="....") List <WebElement> searchIteams;
public String selectItem(String searchItemName)
    {
        String  itemInfo="";
        for(WebElement listItem:searchIteams)
        {
            itemInfo=listItem.getText();
            if(itemInfo.equals(searchItemName))
            {
                listItem.click();
                
            break;
            }
        }
        return itemInfo;
    
    }

返回字符串与我在参数中传递的项目名称成功匹配。我不知道为什么我无法单击匹配的元素。

这是我的测试用例方法:

@Test (priority=2)
    public void checkItemInResult()
    {
        try {
            
            SearchResult sr= new SearchResult(driver);
            String actualItem=  sr.selectItem("Apple iPhone 14 Plus (256 GB) - Yellow");
            assertEquals(actualItem.equals("Apple iPhone 14 Plus (256 GB) - Yellow"), true);
            
            } catch (Exception e) {
           Assert.fail();
        }
        
        
    }


Please help.

Thank you!
java selenium-webdriver page-factory
1个回答
0
投票

我每天都使用 POM 但不是

PageFactory
(见下面的注释)。如果是我,我会重写你的
selectItem()
方法如下。

public void selectItem(String searchItemName) {
    new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.xpath(MessageFormat.format("//span[normalize-space()='{0}']", searchItemName)))).click();
}

使用此方法,您不需要断言返回的字符串,因为如果您成功单击该元素,您就知道它存在......不需要断言。

现在如果你想断言

searchItemName
没有出现在页面上,我会这样做......与上面相同但包裹在
try-catch
中。

public void selectItem(String searchItemName) {
    try {
        new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.xpath(MessageFormat.format("//span[normalize-space()='{0}']", searchItemName)))).click();
    } catch (TimeoutException e) {
        Assert.fail(MessageFormat.format("The <{0}> item does not exist on the page.", searchItemName));
    }
}

注意:如果这是为了工作,您可能无法选择是否使用 PageFactory,但 Selenium 领导和开发人员警告不要使用它。

我遇到的一个主要问题

PageFactory
,除了开发人员的警告,是这样的情况,无法动态过滤获取的项目等

© www.soinside.com 2019 - 2024. All rights reserved.