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

How to force Firefox to be the foreground application when testing with Selenium on Mac OS X

本文关键字:何强制 Firefox 应用程序 前台 测试 OS Mac Selenium      更新时间:2023-09-26

我们最近开始使用Selenium测试基于django的应用程序。测试在Linux上运行得很好,但在Mac OS x上有些失败。我们在两种情况下都使用Firefox作为浏览器,我们花了一些时间(运气不错)才弄清楚这两种情况之间的重要区别在于FF是作为前台应用程序运行还是作为后台窗口运行。下面是Linux上的情况:

  1. Selenium告诉Firefox转到用户注册页面。
  2. Selenium填充用户名和无效的电子邮件地址。
  3. Selenium将焦点从电子邮件地址字段更改为同一页面上的另一个字段(它恰好是搜索框,但这并不重要-所有重要的是焦点更改事件)。
  4. web页面中的Javascript验证码注意到邮件地址无效,并在页面中插入错误消息。
  5. Selenium检测到错误消息并将测试标记为通过。

当我们在Mac OS X上运行时,然而,步骤#4不会发生,除非我们在测试运行时手动将Firefox窗口置于前台—如果我们将其留在后台(这是默认情况下它出现的地方),浏览器中的Javascript不会获得焦点更改事件,因此错误消息永远不会插入页面的DOM中,因此Selenium超时等待它,并且测试失败。

我们可以强制Selenium在测试运行时前台浏览器,以便我们的Javascript将获得我们想要的事件吗?如果有,怎么做?

Selenium通过Javascript驱动浏览器。没有办法通过JS控制浏览器窗口。一般来说,在Selenium中测试"onfocus"answers"onblur"事件是非常困难的。

你可以尝试在输入无效的电子邮件地址后,使用Selenium的'runScript'或'getEval'方法进行JS评估,从而自己触发此事件。这不是"纯粹的"黑盒测试,也就是说,如果验证的实现发生了变化,你的测试就需要改变,但这是执行该测试的最可行的方法。