从 WebElement 中提取定位器并使用 pagefactory

Extracting locator from from WebElement and using pagefactory

我遵循 Page 对象模型并使用一个 Base class,它具有所有常见且可重用的方法,并为我的 Web 应用程序的每个页面分离页面。

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

我在我的 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;

我过去处理过这个问题,但总是不得不求助于其他方法。如果您查看 WebElement 接口定义,则没有获取用于定位元素的 "By" 的方法。

这个问题对你的问题有两个答案:

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

根据我的经验,处理此类事情的最佳方法是深入了解页面工厂的工作原理,并尝试创建您自己的视图工厂,然后从那里自定义您想要的任何内容。

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

干杯!