从WebElement提取定位器并使用pagefactory

时间:2018-06-21 14:35:27

标签: java selenium selenium-webdriver automation pageobjects

我遵循Page对象模型,并且使用具有所有常见和可重用方法的Base类,并且为我的Web应用程序的每个页面提供单独的页面。

现在,我正在尝试在BasePage中创建一个可在其他页面中使用的方法。在每个页面中,我都使用page factory作为元素。

我在BaseClass中使用下面的方法,并且坚持将定位器提取到下面的方法中,以便可以在所有页面中针对不同的元素定位器使用此方法。

BasePage method:

    protected boolean CheckSorting(List<WebElement> element) {
        List<WebElement> issueTypeDropdown = new LinkedList<>(driver.findElements(By.)); // stuck here
        LinkedList<String> issueTypes = new LinkedList<String>();
        for (int i = 0; i < issueTypeDropdown.size(); i++) {
//            System.out.println(issueTypeDropdown.get(i).getText());
            issueTypes.add(issueTypeDropdown.get(i).getText());
        }
        return Compare(issueTypes);
    }

我被困在这里:

List<WebElement> issueTypeDropdown = new LinkedList<>(driver.findElements(By.)); // stuck here

我使用的页面中的PageFactory:

public @FindBy(xpath = "(//INPUT[@type='search'])[4]/following-sibling::UL") List<WebElement> List;

1 个答案:

答案 0 :(得分:2)

我过去已经处理过这个问题,并且总是不得不诉诸其他事情。如果您查看WebElement接口定义,则没有方法可以获取用于定位元素的“按”。

此问题同时回答了您的问题: Get the By locator of an already found WebElement

使用一个实现WebElement的类,将By和Webelement分开,并将By存储在自己的引用变量中。

根据我的经验,处理此类问题的最佳方法是研究页面工厂的工作方式,并尝试创建自己的View Factory,然后从中自定义所需的内容。

我知道这不是一个很好的答案,但是我想与大家分享一下,做这种事情的唯一方法是不使用页面工厂或创建自己的页面。

干杯!