当前位置: 首页 > 知识库问答 >
问题:

是否有一种方法来确定一个元素是否可以在Chrome浏览器中使用Selenium和WATIR点击?

诸葛苏燕
2023-03-14

据我所知,这个问题实际上只有在使用Chrome浏览器执行web测试自动化时才相关,因为click事件是用Selenium Webdriver和ChromeDriver实现的。为了引言,我使用并意识到通过使用Watir元素函数“present?”来找到一个元素,根据我的理解,它本质上是“visible?”的组合。和“存在?”。我还可以在需要时找到一个具有Webdriver元素函数的元素,以识别一个元素是否存在,如果它不存在,则可以挽救异常。我试图确定的是以下几点:

有时,由于缺乏对页面的响应,将会发现一些页面元素,这些元素将通过所有验证测试来验证它的存在,但由于前面提到的页面响应不足,这些元素实际上无法被积极地交互。使用Chrome浏览器(与Chromedriver一起)尝试与这些元素交互将导致错误:

irb(main):003:0>@browser.button(:id,“button_login”)。现在?=>true irb(main):004:0>@browser.button(:id,“button_login”)。单击Selenium::WebDriver::error::unknownerror:unknown error:Element...在点(915,nt将收到click:

我知道我可以在这一点上拯救,但这需要我实际上单击元素。本质上我想写一个特殊的函数“可点击?”这将返回一个布尔输出,而不实际单击元素,也不可能从页面上导航。我不想尝试使用一种类型--Ctrl+Click,如果新窗口返回true,关闭窗口,将焦点设置在第一个窗口,拯救返回false-Workflow。

共有1个答案

徐丰茂
2023-03-14
browser.element(id: 'target').wait_while(&:obscured?).click

瓦蒂尔6.15.0之前

对于旧版本,您需要采取不同的方法。

我会试着等待重叠元素消失。如果重叠是一个最终会消失的覆盖物,那么它就相对简单了-例如:

browser.element(id: 'overlapping_element').wait_while(&:present?)

如果重叠元素被移动而不是消失,或者您不知道重叠元素,可以尝试近似重叠元素检查。当Chrome点击一个元素时,它会得到该元素的中心位置,然后在该位置点击。如果该点的顶级元素不是您的元素,则引发异常。以下wait将执行此检查,直到没有重叠元素:

target = browser.button
target_children = target.elements.to_a
browser.wait_until do
  location = target.location
  size = target.size
  center = [location.x + size.width/2, location.y + size.height/2]
  element_at_point = browser.execute_script("return document.elementFromPoint(#{center[0]}, #{center[1]});")
  [target, target_children].flatten.include?(element_at_point)
end
target.click

注意,我以前没有必须这样做,所以我不知道是否有边缘情况。似乎可以和Chrome和Firefox一起工作。

 类似资料:
  • 对于一些网站,当我按F12按钮看到html元素,什么都没发生。为什么啊?我通过ie和谷歌chrome测试它。有什么工具可以看到这个网站的元素和媒体吗?

  • 问题内容: 截至本文发布之日,名称“ Microsoft Edge”才被正式宣布为新Windows 10的默认浏览器。 问这个问题还为时过早,但是我想知道是否有新的Selenium WebDriver可用,如果没有,是否有任何信息可以告诉我们我们期望等到开发出来再等多久? (Windows 10的技术预览版已经发布,因此在我看来这并不是一个愚蠢的问题。) 问题答案: 是的,Microsoft Ed

  • 问题内容: 我正在使用Selenium RC自动执行一些浏览器操作,但我希望浏览器不可见。这可能吗?怎么样?selenium网格呢?我也可以隐藏Selenium RC窗口吗? 问题答案: 有几种选择: 您可以使用Selenium Grid,以便在完全不同的计算机(或虚拟机)上打开浏览器,然后如果您想查看浏览器,则可以通过VNC或远程桌面连接连接到该计算机。另外,还有一个选择:如果在该远程服务器上运

  • 问题内容: 我知道你可以打电话 如果它不是可执行文件,则会得到一个异常,但这是不安全的,因为运行可执行文件会产生副作用。 我想只检查扩展名在Windows上就足够了,但是有没有办法我可以读取* nix文件系统上的可执行文件呢? 找出文件在OS中是否可执行的最佳方法是什么? 问题答案: 参见java.io.File.canExecute()

  • 截至这篇文章的日期,“Microsoft Edge”这个名字刚刚被正式宣布为新Windows10的默认浏览器。 现在问可能还为时过早,但我想知道是否有一个新的Selenium WebDriver可供使用,如果没有,是否有任何告诉我们,我们可能会等多久,直到我们看到一个开发出来?

  • 我想删除一些与其他输出值相同的输出!因为Test1=Test2=Test5=Test6,所以我希望它在控制台上只显示Test1!Test3=Test4=Test7=Test8,所以我希望它只显示Test3。。。。。。。。 以下代码是我所做的: 以下是我的输出: