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

Tob*_*ias 1 java selenium xpath findby selenium-webdriver

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

如果我有一个 By

By parentBy = new By.xpath(".//div[@class='parent']")
Run Code Online (Sandbox Code Playgroud)

和另一个 By

By childBy = new By.xpath(".//div[@class='child']")
Run Code Online (Sandbox Code Playgroud)

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

By combinedBy = new By.xpath(".//div[@class='parent']/div[@class='child']")
Run Code Online (Sandbox Code Playgroud)

就像是

By combinedBy1 = parentBy + childBy
By combinedBy2 = parentBy.Concat(childBy)
Run Code Online (Sandbox Code Playgroud)

用例:

我们使用页面对象模型.

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

Pri*_*mre 8

除了@SiKing 所说的之外,我还建议您查看该ByChained课程(有关 javadoc,请参见此处)。

如何使用它的示例:

driver.findElements(new ByChained(By.id("product-table"), By.className("quantity")));
Run Code Online (Sandbox Code Playgroud)

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


SiK*_*ing 5

您有两种选择:

  1. 你可以这样做:

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