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 像用户一样点击 - 即在特定坐标的最深元素处点击。
我有以下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 像用户一样点击 - 即在特定坐标的最深元素处点击。