Watir 找不到名称为 class 的所有元素

Watir not finding all elements with a class name

我正在尝试使用 Watir 在 "feed" 网站中查找所有具有 class 的跨度元素。

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

# 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) 或 none,而 class [=14= 至少有 25 个跨度].

我的代码有问题吗?

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

这个显然行不通,因为你说的像 class 名字包含 "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')]")