【问题标题】:Java Selenium - Find string text from multiple divs with same class name using xpathJava Selenium - 使用 xpath 从具有相同类名的多个 div 中查找字符串文本
【发布时间】:2017-06-09 02:58:35
【问题描述】:

我希望你能帮助我。

关于如何使用 xpath 查询在具有相同类名的多个 div 中循环,我一直在浏览各种论坛和问题。我对 WebDriver 和 Java 还很陌生,所以我可能没有正确地问这个问题。

我有一张表,我正在尝试识别其中的值并确保它们是正确的。每个字段都具有相同的类标识符,我能够成功地拉回第一个结果并使用以下方法通过报告日志记录确认

String className1 = driver.findElement(By.xpath("(//div[@class='table_class'])")).getText();
Reporter.log("=====Class Identified as "+className1+"=====", true);

但是,当我尝试循环浏览(我看到多个答案说要在 xpath 查询中添加 [2] 后缀)时,我遇到了编译错误:

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])")[2]).getText();
Reporter.log("=====Class Identified as "+className2+"=====", true);

上面给出了一个错误提示“表达式的类型必须是数组类型,但它解析为 By”

我不是 100% 确定如何构造它以设置数组然后循环。

虽然现在这只是验证字段标签,但最终我需要使用这种方法来验证提取的后续数据,然后我会遇到同样的问题

【问题讨论】:

  • 您是否有理由要使用 xpath 或者您可以使用 css 选择器?
  • 没有特别的理由使用 xpath 而不是 css 选择器,但是我在网上阅读的很多东西都使用 xpath,所以假设这是“最正确”的做法
  • 但回到问题上来,您可以使用driver.findElements 并循环遍历,而不是单独定位每个项目吗?
  • 你能给我举个例子吗?正如我所说,我对 java 和 selenium 还很陌生,所以不会自动知道如何遍历这些项目。这听起来像是我需要的,但我不知道如何写它
  • 看看@NarendraRajput 的回答,他打败了我

标签: java selenium xpath selenium-webdriver automated-tests


【解决方案1】:

您收到错误 -

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])")[2]).getText();

因为你以错误的方式使用索引将其修改为 -

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])[2]")).getText();

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'][2])")).getText();

而更好的方法是 -

int index=1;
List <WebElement> allElement = driver.findElements(By.xpath("(//div[@class='table_class'])"));
for(WebElement element: allElement)
{
    String className = element.getText();
    Reporter.log("=====Class Identified as "+className+""+index+""+"=====", true);
    index++
}

【讨论】:

  • 感谢您的回答。我无法获得建议的前两个选项,但我能够获得“更好”的工作方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
相关资源
最近更新 更多