请在不喜欢或评论之前阅读整个Q.我在网上搜索之前已在互联网上搜索过。我有以下项目结构。
pages(package)
> Homepage.java
test(package)
> Flipkart.java
在 Homepage.java 内部,我已使用 POM Page Factory方法声明了所有WebElements,并创建了相应的方法来点击Electronics链接。 < / p>
@FindBy(xpath = '//input[@title='Electronics']')
private WebElement lnkElectronics;
在 Fipkart.java 内部我正在调用电子邮件点击方法。
我对这里的疑问是声明的WebElement专门用于电子产品。
有没有办法可以创建一个类型如下所述的WebElement,并从main方法动态传递%s的值?
@FindBy(xpath = '//input[@title='%s']')
private WebElement lnkElectronics;
答案 0 :(得分:2)
从Page Object Model in Selenium
引用的答案您不能使用Variable创建FindBy,FindBy只接受常量。
如果你想要实现这种可变性,那么你应该使用普通的findElement方法编写或找到元素
答案 1 :(得分:1)
根据Page Object Design Pattern后面的测试设计注意事项:
Page Object 是一个面向对象的类,用作正在测试的应用程序页面的接口。只要需要与该页面的用户界面进行交互,您的@Tests
就会使用此 Page Object 类的方法。好处是,如果页面的UI发生变化,则@Tests
本身不需要更改。只需更改 Page Object 中的代码。
优点:
根据这些 Page Factory 功能,您无法创建任何可以动态传递值的通用 WebElement 来自main()
或@Test
注释方法,例如
@FindBy(xpath = '//input[@title='%s']')
private WebElement lnkElectronics;
您可以在Where should I define modal specific code in Selenium Page Object Model pattern
中找到几乎类似的讨论答案 2 :(得分:0)
WorkAround:您可以在页面类上定义一个方法,并可以从调用类中动态传递文本以单击特定选项卡
如果要单击页面上的任何常用文本。您可以创建如下所示的方法,并且可以动态传递文本以单击该页面上的特定标签。
public void clickTab(String tabText){
String tabxpath = "//div[contains(text(), '" + tabText + "')]";
driver.findElement(By.xpath(tabxpath)).click();
}