Watir-Webdriver,可以点击 chrome 中的元素,但不能点击 firefox 中的元素

Watir-Webdriver, can click element in chrome but not in firefox

我有以下HTML

<div class="brands brands-search-region">
    <section class="module">
        <div class="listing">
            <article id="" class="node node-brand brand brand-item clickable multiple-item" about="/node/85531" typeof="sioc:Item foaf:Document">
                <a href="/node/85531">
                </a>
            </article>
        </div>
    </section>
</div>

我可以在 chrome 中单击文章元素,但不能在 firefox 中使用:

browser.div(class: 'brands-search-region').article.click

我知道我能做到:

browser.div(class: 'brands-search-region').article.a.click that works in both but why does the previous not work in firefox?

我正在使用 watir-webdriver 和最新版本的 firefox,chrome驱动程序和 selenium-webdriver

不同的行为是由于 FirefoxDriver 与 ChromeDriver 相比如何实现元素的点击。根据我过去的观察:

  • Chrome 确定元素的中心,然后单击这些坐标处的最深元素。
  • Firefox 确定元素的中心,然后单击元素的中心。

换句话说,Firefox 正在点击文章元素。点击事件只会冒泡,这意味着内部 link 永远不会收到点击。相反,Chrome 的算法将导致 link 元素首先被点击。

您可以在下一页中看到不同的行为。当接收到点击事件的元素将显示警报。

<html>
  <head>
    <script>
      function highlight(elem) {
        alert(elem.nodeName);
      }
    </script>
  </head>
  <body>
    <div class="brands brands-search-region">
      <section class="module" onclick="highlight(this);">
        <div class="listing" onclick="highlight(this);">
          <article onclick="highlight(this);" style="border:1px solid red; text-align:center;">
            <a href="" style="border:1px solid green;" onclick="highlight(this);">asdf</a>
          </article>
        </div>
      </section>
    </div>
  </body>
</html>

运行 以下脚本使用 Chrome 和 Firefox:

browser = Watir::Browser.new :firefox # or :chrome
browser.goto 'path/to/file/test.htm'

browser.div(class: 'brands-search-region').article.click

bubbling = []
while browser.alert.exists?
    bubbling << browser.alert.text
    browser.alert.ok
    sleep(1)
end
p bubbling

在 Chrome 中,bubbling 将是:

["A", "ARTICLE", "DIV", "SECTION"]

在 Firefox 中,bubbling 将是:

["ARTICLE", "DIV", "SECTION"]

Firefox 已在您告诉它单击的元素(即文章元素)处启动了单击事件。相比之下,Chrome 像用户一样点击 - 即在特定坐标的最深元素处点击。