【问题标题】:findElement from a previously filtered page returns the same result来自先前过滤页面的 findElement 返回相同的结果
【发布时间】:2020-06-26 00:16:36
【问题描述】:

所以我有这段代码(我希望这可以缩小范围):

List<WebElement> resultList = driver.findElements(By.className("result"));
for (WebElement item : resultList) {
     String rating = item.findElement(By.xpath("//div[starts-with(@class, 'result-rating')]")).getAttribute("class");
    (...)

让我分解一下我认为我在做什么:

首先,我将我感兴趣的节点分成一个 webElements 列表。 然后我逐项循环,并尝试获取该项目下的 div 元素,其类以 result-rating 开头。

问题是我总是得到相同的评分值,这是第一个。如果我打印出我得到的值,它们是正确的。但是当我尝试进一步过滤它(第 3 行)时,该特定值总是相同。

但是,如果我的列表中的每个项目都包含不同的节点,该怎么办?怎么可能都有所有的页面代码只返回第一个?

最重要的是......如何解决我正在做的事情以获得每条记录的相应评级?

提前谢谢你!

【问题讨论】:

  • 你试过调试吗?
  • 嗯,第三行的findElement是一个单独的语句,不知道能不能看出来后面是怎么回事。但是,是的,如果我打印出 for 中的元素,它们就是我需要的所有节点。只有评级始终相同。

标签: java selenium


【解决方案1】:

如果我猜对了,您首先尝试按类名(“result”)获取项目列表,然后迭代列表中的每个项目以找到类以“result-rating”开头的元素,然后获取它是类属性。如果是这种情况,那么您可以在下面尝试。

    List<String> resultRatingList = resultList.stream()
        .map(element -> element.findElement(By.xpath("//div[starts-with(@class, 'result-rating')]")).getAttribute("class"))
        .collect(Collectors.toList());

【讨论】:

  • 嗨,也许我没能解释实际的问题是什么(不过感谢您的建议,看起来真的很优雅)。但这是交易:如果我对我的 for 中的值执行 System.out.println,它们是正确的。只是第 3 行中的代码,过滤类,实际上失败并且总是返回相同的值(从第一个元素)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2016-04-26
  • 2014-05-06
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多