【问题标题】:Watir not finding all elements with a class nameWatir 没有找到具有类名的所有元素
【发布时间】:2018-05-07 21:34:23
【问题描述】:

我正在尝试使用 Watir 在“提要”网站中查找所有具有类的 span 元素。

当我到达底部时,该网站会加载更多帖子。 我目前正在使用以下代码:

# Go to the bottom of the page
browser.driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
likes = @browser.elements(:xpath, "//*[contains(@class, 'className')]")
# I also tried with the following
likes = @browser.spans(:class => "className")

我正在搜索的元素遵循以下样式:

<span class="random_value className ">Like</span>

但是,当我在做 likes.length 时,我得到的元素更少 (3) 或没有,而 className 类至少有 25 个跨度。

我的代码有问题吗?

【问题讨论】:

  • 您能否提供(最少的)HTML 来重现该问题?或者提供被测站点的 URL?

标签: ruby xpath watir


【解决方案1】:
likes = @browser.spans(:class => "className")

这个显然行不通,因为你说的好像类名包含“className”,所以你最好用正则表达式写

likes = @browser.spans(:class => /className/)

或者使用其他选项稍作修正,因为您只需要跨度,您不必使用 * 而是使用 span

likes = @browser.elements(:xpath, "//span[contains(@class, 'className')]")

当您将一个页面导航到另一个页面时,Watir 通常会等到页面完全加载,我们不必使用任何静态睡眠语句,但是由于您说页面在到达底部时加载更多跨度,您的情况似乎有点不同,我强烈怀疑上面的代码甚至在页面加载完全之前执行得很快,所以把sleep 5检查一下你是否增加了跨度,所以用sleep 5写下面的代码

WATIR 为您提供 execute_script,因此您不必直接使用 selenium execute_script

@browser.execute_script("window.scrollBy(0,document.body.scrollHeight)")
sleep 5
likes = @browser.elements(:xpath, "//span[contains(@class, 'className')]")

【讨论】:

  • 你的答案是正确的。我发现 Watir 没有找到所有 div 的原因是,当我转到页面底部时,React 会卸载另一个跨度,因此,通过搜索当前跨度,交互,然后到底部,我' m 具有所需的功能。
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2021-06-06
相关资源
最近更新 更多