即使元素可见,Watir-webdriver也会抛出’not clickable’错误

我正在尝试使用最新的Watir-Webdriver 0.9.1Selenium-Webdriver 2.53.0Chrome扩展2.21在Ruby中自动化测试。 但是,我测试的网站顶部有静态标题,底部有静态页脚。 因此,由于Watir在单击之前将元素自动滚动到视图中,因此元素将隐藏在静态页眉或静态页脚下。 我不想将desired_capabitlites (ElementScrollBehavior)设置为10因为我正在测试的网站可以兼具 – 静态页眉或静态页脚或两者。

因此问题是:
1)为什么Watir会抛出exceptionElement not clickable即使元素可见并存在,也Element not clickable ? 请参阅ruby代码(我已经选择了一个随机的公司网站作为示例)以及下面的结果。
2)如何在不诉诸ElementScrollBehaviour的情况下解决这个问题?

Ruby代码:

 require 'watir-webdriver' browser = Watir::Browser.new :chrome begin # Step 1 browser.goto "shop.coles.com.au/online/mobile/national" # Step 2 - click on 'Full Website' link at the bottom link = browser.link(text: "Full website") #check if link exists, present and visible? puts link.exists? puts link.present? puts link.visible? #click on link link.click rescue => e puts e.inspect ensure sleep 5 end puts browser.url browser.close 

结果:

 $ ruby link_not_clickable.rb true true true Selenium::WebDriver::Error::UnknownError: unknown error: Element is not clickable at point (460, 1295). Other element would receive the click: div class="shoppingFooter"...div (Session info: chrome=50.0.2661.75) (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Mac OS X 10.10.5 x86_64)> http://shop.coles.com.au/online/mobile/national 

谢谢!

您可以在任何元素上单击而不使其可见。 看一下这个:

 link.fire_event('click') 

但是 ,即使它实际上不可见,或者只是不可能点击它(例如,由于粘性页脚断裂),它是非常非常非常不好的决定。

这就是为什么等待fooler,滚动页面然后单击如下更好的原因:

 browser.div(id: "footerMessageArea").wait_until_present browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") link.click 

粘性页脚阻止webdriver执行单击,因此显示“其他元素将收到点击”的消息。

有几种不同的方法可以解决这个问题。

  1. 在单击之前向下滚动到页面底部
  2. 在任何/所有链接点击之前隐藏/删除粘性页脚
  3. 在执行单击之前,请关注要单击的元素下方的元素

我猜你的元素在屏幕上可见。

在首先单击元素之前,您必须滚动网页以便元素可见,然后执行单击。 希望它应该工作。

我有类似的问题,我只是使用以下javascript代码与watir:

 link = browser.link(text: "Full website") @browser.execute_script("arguments[0].focus(); arguments[0].click();", link) 

有时我必须使用.click! 我相信是fire_event等价物。 基本上有些东西是分层怪异的,你只需要绕过前端的混乱。

Interesting Posts