Javascript 在Mac OS X上使用Selenium进行测试时,如何强制Firefox成为前台应用程序

Javascript 在Mac OS X上使用Selenium进行测试时,如何强制Firefox成为前台应用程序,javascript,macos,firefox,selenium,Javascript,Macos,Firefox,Selenium,我们最近开始使用Selenium测试基于Django的应用程序。在Linux上测试运行正常,但在Mac OS X上有些测试失败。我们在这两种情况下都使用Firefox作为浏览器,我们花了一段时间(运气也不错)才发现这两种情况之间的重要区别在于FF是作为前台应用程序还是作为后台窗口运行。以下是Linux上发生的情况: Selenium告诉Firefox转到用户注册页面 Selenium填写用户名和无效的电子邮件地址 Selenium将焦点从电子邮件地址字段更改为同一页面上的另一个字段(它恰好是搜索

我们最近开始使用Selenium测试基于Django的应用程序。在Linux上测试运行正常,但在Mac OS X上有些测试失败。我们在这两种情况下都使用Firefox作为浏览器,我们花了一段时间(运气也不错)才发现这两种情况之间的重要区别在于FF是作为前台应用程序还是作为后台窗口运行。以下是Linux上发生的情况:

  • Selenium告诉Firefox转到用户注册页面
  • Selenium填写用户名和无效的电子邮件地址
  • Selenium将焦点从电子邮件地址字段更改为同一页面上的另一个字段(它恰好是搜索框,但这并不重要——重要的是焦点事件的更改)
  • 网页中的Javascript验证代码会注意到电子邮件地址无效,并在网页中插入错误消息
  • Selenium检测到该错误消息并将测试标记为已通过
  • 但是,当我们在Mac OS X上运行时,除非我们在测试运行时手动将Firefox窗口置于前台,否则步骤4不会发生——如果我们将其置于后台(默认情况下会出现该窗口),浏览器中的Javascript不会获得焦点更改事件,因此错误消息永远不会插入页面的DOM中,因此Selenium在等待它时超时,测试失败


    我们是否可以在测试运行时强制Selenium将浏览器置于前台,以便我们的Javascript能够获得我们想要的事件?如果是这样的话,如何实现?

    Selenium通过Javascript驱动浏览器。无法通过JS控制浏览器窗口。一般来说,在Selenium中测试“onfocus”和“onblur”事件非常困难


    您可以在输入无效电子邮件地址后,通过使用Selenium的“runScript”或“getEval”方法执行JS评估来尝试自己触发此事件。这不是“纯粹”的黑盒测试,即如果验证的实现发生了变化,您的测试需要改变,但这是执行此测试的最可行的方法。

    您可以发布您正在使用的确切代码吗?是的,JavaScript或Java都无法做到这一点。他们都被沙箱压得太重了。在ObjectiveC或C++中,你必须编写一个本地应用程序来操纵焦点,并在启动Self时从JVM调用它。即使这样也可能不太好,因为窗口管理器通常(正确地)不允许您在焦点上乱搞,因为它应该由用户决定。正如Pavan所说,可能唯一可靠的方法是手动触发focus事件。