2

在不喜欢或评论某事之前,请阅读整个 Q。在这里发布之前,我已经在互联网上进行了搜索。我有以下项目结构。

pages(package)
    > Homepage.java
test(package)
    > Flipkart.java 

Homepage.java中,我已经使用POM Page Factory 方法声明了所有 WebElement ,并创建了相应的方法来单击 Electronics 链接。

@FindBy(xpath = '//input[@title='Electronics']')
private WebElement lnkElectronics;

Fipkart.java 中,我调用Electronics click 方法

我在这里的疑问是声明的 WebElement 是专门用于电子产品的。

有没有一种方法可以创建一个具有如下所述类型的 WebElement 并从 main 方法动态传递 %s 的值?

@FindBy(xpath = '//input[@title='%s']')
private WebElement lnkElectronics;
4

3 回答 3

2

从Selenium 中的页面对象模型引用的答案

您不能使用变量创建 FindBy,FindBy 只接受常量。

如果您想实现这种可变性,那么您应该使用普通的 findElement 方法编写或查找元素

于 2018-03-15T04:52:37.387 回答
1

根据以下页面对象设计模式的测试设计注意事项

  • 页面对象是一个面向对象的类,用作被测应用程序页面的接口。每当需要与该页面的用户界面交互时,您就可以@Tests使用此页面对象类的方法。好处是,如果页面的 UI 发生变化,您自己就不需要更改。只有页面对象中的代码需要更改。@Tests

    优点 :

    • 测试代码和页面特定代码(例如定位器、方法和布局)之间的清晰分离。
    • 页面提供的操作的单个存储库,而不是将这些服务分散在整个测试中。

基于这些页面工厂功能,您将无法创建任何通用WebElement,您可以为其动态传递值main()@Test带注释的方法,例如

@FindBy(xpath = '//input[@title='%s']')
private WebElement lnkElectronics;

您可以在Where should I define modal specific code in Selenium Page Object Model pattern中找到几乎类似的讨论

于 2018-03-14T19:02:52.347 回答
0

解决方法:在页面类上,您可以定义一个方法,并且可以从调用类动态传递文本以单击特定选项卡

如果您想单击页面上的任何常见文本。您可以创建如下所示的方法,并可以动态传递文本以单击该页面上的特定选项卡

  public void clickTab(String tabText){
       String tabxpath = "//div[contains(text(), '" + tabText + "')]";
       driver.findElement(By.xpath(tabxpath)).click();

   }
于 2018-11-25T23:37:48.023 回答