加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用Selenium WebDriver和Ruby确定该元素是否可以点击?

发布时间:2020-12-17 02:20:51 所属栏目:百科 来源:网络整理
导读:在我的网页上,页面加载但页面的子标签在20秒内无法点击(有时超过此时间).页面内容是 – nav id="subTabHeaders" div class="selected" data-name="ab"AB/div div class="" data-name="cd"CD/div div class="" data-name="ef"EF/div div class="" data-name="
在我的网页上,页面加载但页面的子标签在20秒内无法点击(有时超过此时间).页面内容是 –

<nav id="subTabHeaders">
 <div class="selected" data-name="ab">AB</div>
 <div class="" data-name="cd">CD</div>
 <div class="" data-name="ef">EF</div>
 <div class="" data-name="gh">GH</div>
</nav>

我要点击子标签,因此我尝试了以下方式 –
睡觉和放松然后是element.click
但睡眠并不是理想的处理方式,因为有时可能会发生子标签元素在睡眠时间之前或之后可点击.

使用睡眠,我做了以下 –

element = WAIT.until { driver.find_element(:xpath,".//*[@id='subTabHeaders']/div[3]")}
sleep 20
element.click

如果元素在超过睡眠时间后可点击,则可以我们在睡眠时间到期后立即点击元素,(我的意思是(使用上面的代码)假设元素在30秒后变为可点击但我们在20秒后立即点击元素),实际点击动作不会发生&也点击不会返回任何错误.

是否有Ruby方法来检查元素是否可点击?这样我们就可以知道何时点击了.

解决方法

从 ruby bindings page :(见驱动程序示例)

# wait for a specific element to show up
wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
wait.until { driver.find_element(:id => "foo") }

所以通常你可以这样做:

wait = Selenium::WebDriver::Wait.new(:timeout => 40)
wait.until do
  element = driver.find_element(:xpath,".//*[@id='subTabHeaders']/div[3]")
  element.click
end

或者更简洁

wait = Selenium::WebDriver::Wait.new(:timeout => 40)
wait.until { driver.find_element(:xpath,".//*[@id='subTabHeaders']/div[3]").click }

但是,由于您说点击不会引发错误,听起来好像点击实际上正常工作,只是您的页面还没有准备好显示该标签.我猜这里有一些异步javascript.
所以你可以尝试的是在等待块内,检查点击是否导致了所需的更改.我猜,但你可以尝试类似的东西:

wait = Selenium::WebDriver::Wait.new(:timeout => 40)
wait.until do
  driver.find_element(:xpath,".//*[@id='subTabHeaders']/div[3]").click
  driver.find_element(:xpath,".//*[@id='subTabHeaders']/div[3][@class='selected']")
end

这里重要的是#until将等待并重复,直到块获得真实结果或超过超时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读