我遵循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;
答案 0 :(得分:2)
我过去已经处理过这个问题,并且总是不得不诉诸其他事情。如果您查看WebElement接口定义,则没有方法可以获取用于定位元素的“按”。
此问题同时回答了您的问题: Get the By locator of an already found WebElement
使用一个实现WebElement的类,将By和Webelement分开,并将By存储在自己的引用变量中。
根据我的经验,处理此类问题的最佳方法是研究页面工厂的工作方式,并尝试创建自己的View Factory,然后从中自定义所需的内容。
我知道这不是一个很好的答案,但是我想与大家分享一下,做这种事情的唯一方法是不使用页面工厂或创建自己的页面。
干杯!