gpt4 book ai didi

ruby - 如何使用带有 Ruby 的 Selenium WebDriver 确定该元素是可点击的?

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:25 29 4
gpt4 key购买 nike

在我的网页上,页面加载但页面的子选项卡在 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但是 sleep 并不是理想的处理方式,因为有时可能会发生子选项卡元素在给定 sleep 时间之前或之后可点击的情况。

使用 sleep ,我做了以下 -

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

如果元素在超过 sleep 时间后可点击,并且我们在 sleep 时间到期后立即点击元素,(我的意思是(使用上面的代码)假设元素在 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。
所以您可以尝试在等待 block 内,检查点击是否引起了所需的更改。我猜,但你可以尝试类似的东西:

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将等待并重复,直到该 block 获得真实结果或超过超时。

关于ruby - 如何使用带有 Ruby 的 Selenium WebDriver 确定该元素是可点击的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643040/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com