-1

在我的项目中,我得到了一堆搜索结果。现在我想根据用户参数单击特定元素。使用页面工厂设计模式

EbayPage.java - PageFatory

@FindBy(xpath="//h3[@class='s-item__title']")
List<WebElement> serachresults;
public List<WebElement> SearchResults() {
    return serachresults;
}

EbayTest.java - 测试用例

List<WebElement> products = ebp.SearchResults(); 
System.out.println("No of products on first page "+products.size());
for(int i=0;i<products.size();i++) {
System.out.println(products.get(i).getText());
} 
//**How can i handle this type of xpaths in Page Factory Model**
int no = 6;
driver.findElement(By.xpath("//li[@data-view='mi:1686|iid:"+no+"']/div/div[@class='s-item__image-section']")).click();
System.out.println(no+" th product is: "+driver.getTitle());
}

提前致谢。

4

2 回答 2

0

标准页面工厂模型对于您尝试做的事情可能过于僵化,因为它会尽快在构造函数中创建页面对象。

这可能不是您正在寻找的答案,但如果您真的想使用基于组件的方法,请查看我创建的这个项目以解决此问题以及页面工厂的一些其他限制(查看项目的 wiki 以获取示例):

https://bitbucket.org/rostislav_matl/aport/

于 2019-08-07T13:42:21.860 回答
0

以此为例并在您的项目中使用它:

@FindBy(xpath = "//div[@class='panel-body']/preceding-sibling::"
            + "div[text()='Radio Button Demo']/following-sibling::div")
private WebElement radioBtnGenderRadioButtonDemoXpath;

public void selectGenderMaleOrFemale(String gender) {
radioBtnGenderRadioButtonDemoXpath
                .findElement(By.xpath(".//label[contains(text(),'" + gender + "')]/input[1]")));
}
于 2020-08-17T12:09:38.713 回答