Watir没有找到具有类名的所有元素

时间:2018-05-07 21:34:24

标签: ruby xpath watir

我试图找到所有在" Feed"中有类的span元素。 Watir的网站。

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

# 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个跨度。

我的代码有问题吗?

1 个答案:

答案 0 :(得分:0)

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

这个显然不会起作用,因为你说的是​​类名包含&#34; className&#34;所以你最好用正则表达式写

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

或者使用其他选项进行一些修正,因为您只需要跨度,您不必使用*代替使用span

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

当您将一个页面导航到另一个页面时,Watir通常会等到页面完全加载,我们不必使用任何静态睡眠语句但是因为您说当页面加载到底部时您的情况似乎是一点点不同,我强烈怀疑上面的代码甚至在页面加载完全之前就快速执行,因此请sleep 5检查是否增加了跨度数,所以用sleep 5

写下面的代码

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

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