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

Java 从WebElement提取定位器并使用pagefactory,java,selenium,selenium-webdriver,automation,pageobjects,Java,Selenium,Selenium Webdriver,Automation,Pageobjects,我遵循一个页面对象模型,并使用一个基类,该基类具有所有通用和可重用的方法,并为我的web应用程序的每个页面提供单独的页面 现在我正在尝试在BasePage中创建一个可以在其他页面中使用的方法。在每个页面中,我都使用页面工厂作为元素 我在我的基类中使用下面的方法,我一直致力于将定位器提取到下面的方法中,以便我可以在不同元素定位器的所有页面中使用此方法 BasePage method: protected boolean CheckSorting(List<WebElement>

我遵循一个页面对象模型,并使用一个基类,该基类具有所有通用和可重用的方法,并为我的web应用程序的每个页面提供单独的页面

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

我在我的基类中使用下面的方法,我一直致力于将定位器提取到下面的方法中,以便我可以在不同元素定位器的所有页面中使用此方法

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);
    }
BasePage方法:
受保护的布尔检查排序(列表元素){
List issueTypeDropdown=newlinkedlist(driver.findElements(By.));//卡在这里
LinkedList issueTypes=新建LinkedList();
对于(int i=0;i
我被困在这里:

List<WebElement> issueTypeDropdown = new LinkedList<>(driver.findElements(By.)); // stuck here
List issueTypeDropdown=newlinkedlist(driver.findElements(By.));//困在这里
我使用的页面中的我的PageFactory:

public @FindBy(xpath = "(//INPUT[@type='search'])[4]/following-sibling::UL") List<WebElement> List;
public@FindBy(xpath=“(//输入[@type='search'])[4]/以下同级::UL”)列表;

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

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

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

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

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


干杯

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

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

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

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

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


干杯

问题是什么?我已经编辑了OP的最后一行。我需要格式化方法,以便可以在其中使用元素定位器。现在我不知道如何处理这个问题:
List issueTypeDropdown=newlinkedlist(driver.findElements(By.));//卡在这里
所以您想在不同的位置策略中使用此方法?是的..跨不同的页面问题是什么?我已经编辑了OP的最后一行。我需要格式化方法,以便在其中使用元素定位器。现在我不知道如何处理这个问题:
List issueTypeDropdown=newlinkedlist(driver.findElements(By.));//卡在这里
所以您想在不同的位置策略中使用此方法?是..跨不同的页面