鼠标悬停在Safari浏览器中无法工作,使用Selenium Web Driver。

4

我在Firefox和Chrome中使用"Actions"悬停鼠标,效果很好。但是同样的代码在Safari中不起作用。我正在使用Mac OS、Selenium WebDriver和Java。

我尝试了以下代码:

 new Actions(driver).moveToElement(element).build().perform();

JS:

String mouseOverScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false); arguments[0].dispatchEvent(evObj);} else if(document.createEventObject) { arguments[0].fireEvent('onmouseover');}";
                    JavascriptExecutor js = (JavascriptExecutor) driver;
                    js.executeScript(mouseOverScript, element);

这是一个阻止程序运行的问题。非常感谢您提供帮助。


你是否已经检查过 Selenium 是否与你正在测试的 Safari 版本兼容? - Yu Zhang
@YuZhang,是的,它是兼容的。 - lakeshoredrive
1个回答

4
执行鼠标悬停需要使用WebDriver的高级用户交互API。在Java语言绑定中,这是通过Actions类实现的。不幸的是,目前,SafariDriver 没有实现高级用户交互API,因此您无法直接完成此操作。在它被实现之前,您可以使用JavaScript模拟鼠标悬停触发的事件。

感谢您的回复。我上面提到的Java脚本在一个场景中运行良好,在另一个场景中却不起作用。这真是奇怪。您能否分享一些Java脚本代码片段吗?非常感谢您的帮助。 - lakeshoredrive
考虑到Selenium团队已经一年多没有维护Safari Driver了,这可能不是他们提供的... 唉。 - uchuugaka
1
2018年3月,仍然没有进展。:( - SiKing
@SiKing,考虑到Selenium项目不再维护Safari驱动程序,我不确定这是针对该项目的有效投诉。但是,苹果公司已经为Safari提供了驱动程序,并且已经有一段时间了。如果该驱动程序没有实现操作API,则这 hardly 与Selenium项目有关。 - JimEvans
@JimEvans 同意。我想我的评论应该更清楚:到2018年3月,现任维护者苹果公司仍未取得任何进展。 - SiKing
1
只是好奇,"使用JavaScript触发鼠标悬停时触发的事件"会是什么样子?在browser.execute()中需要输入什么才能实现这个功能? - kyoob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接