Selenium:更改By-instance或concat两个By-instances

时间:2014-06-13 12:56:17

标签: java selenium xpath selenium-webdriver findby

是否可以组合/连接两个Bys?

如果我有一个By

By parentBy = new By.xpath(".//div[@class='parent']")

和另一个By

By childBy = new By.xpath(".//div[@class='child']")

是否可以将两个Bys连接到一个具有此xpath的新Bys?

By combinedBy = new By.xpath(".//div[@class='parent']/div[@class='child']")

这样的东西
By combinedBy1 = parentBy + childBy
By combinedBy2 = parentBy.Concat(childBy)

USECASE:

我们使用页面对象模型。

现在我有一个表作为子页面对象模型。该表应该有一个选择一些数据的方法。由于一些html结构问题(它是第三方),我必须通过检查一个单元格的类和该单元格的文本/内容来xpath一个div(行)的子表。 / p>

2 个答案:

答案 0 :(得分:5)

您有两种选择:

  1. 您可以执行以下操作:

    WebElement parentEl = driver.findElement(By.xpath(""))
    WebElement childEl = parentEl.findElement(By.className(""))
    
  2. 使用PageFactory @FindBys。请参阅Selenium PageFactorySelenium API

答案 1 :(得分:3)

除了@SiKing所说的,我还建议查看ByChained类(有关javadocs,请参阅here)。

如何使用它的示例:

driver.findElements(new ByChained(By.id("product-table"), By.className("quantity")));

不确定这是否直接解决了OP的问题,但仍然非常有用。