从CI运行时,Selenium Chrome Driver屏幕大小未正确设置

这在一个句子中有点难以描述,所以我不得不在这里详细介绍一下。

问题:

我有一些seleniumtesting,当他们在本地运行,它工作得很好。

当我通过Bamboo (由于它是一个服务,它本身作为SYSTEM用户在Windows机器上运行)运行时出现问题,其中一个testing失败。

在使用RemoteWebDriver.GetScreenshot()进行了一些debugging后,我发现尽pipe将屏幕尺寸设置为1920x1080 ,实际上它是一个小得多的1134x663导致其中一个testing失败。 本地它尊重任何我设置的任意分辨率,但在具有相同的Chrome驱动程序,Selenium版本,NUnit和源代码的CI机器上,它始终是这个小的分辨率。

我有将来的工作,使网站完全响应,但目前,我仍然希望确保竹使用我指定的大小。

题:

通过SYSTEM运行Bamboo可能会对Seleium造成任何问题。 这是我在本地和CI运行之间唯一的区别。 还有其他的可能吗?

其他信息:

我如何设置屏幕大小

WebDriver.Window.Size = new Size(Config.WindowWidth, Config.WindowHeight);

Chrome驱动程序Version 29

NUnit Version 3.6.1

Selenium Web驱动程序Version 3.4.0

我通过各种选择…


服务:

竹子似乎最初是作为一种服务来运转是明智的。 它需要永久打开,99%的工作不需要任何形式的图形界面。 除了这个硒的情况。

由于默认情况下,服务以SYSTEM身份运行,处于“会话0”(显然是无头的状态)的用户,我想在“服务”窗口中启用“允许服务与桌面交互”。

服务截图

但是,这也不起作用。 我在网上阅读也许这只是一个遗留选项。 无论如何,它提供了和以前一样的行为。

然后,我想创建一个新的“普通”本地用户来运行该服务,希望在正常的会话下运行,不受任何图形/非交互式怪异的限制。

替代用户

这再次没有工作。 竹子运行良好,并提供了一个网络界面,但硒特别是仍然有同样的问题。 与系统帐户不同,没有“允许服务与桌面交互”的选项。


计划任务:

在此之后,我决定完全删除方程中的服务,只是运行Bamboo作为我的新本地用户的计划任务。 我将它设置为在PC启动时运行,无论用户是否登录,都运行。

还是一样的行为!

然后我发现如果程序在用户没有登录的情况下启动,那么它仍然是“无头的”,并且会出现相同的问题。

我终于通过让用户登录该帐户的计划任务运行它的工作。 只有当用户帐户实际登录(并且因此呈现正常桌面)时,才能运行Bamboo。

所以这样做最终使它工作! 它还具有如下优点:如果您通过远程桌面进行观看,则可以实时查看动作。

在思考中,我可以看到这个最终解决方案的一些优点和缺点。


优点:

  • 有用…
  • 如果我在遥远的地方,我可以看到硒在我眼前

缺点:

  • 这似乎是对预定任务的轻微滥用。 据我所知,最好的做法是你需要永久运行并在后台运行的东西,比如SQL server,应该作为服务来运行。 在某一点运行的事情,但后来退出应该是计划的任务。
  • 对于这个用户帐户,Bamboo在桌面上显示一个shell。 我没有注意到网站上有任何放缓,但我认为所有在CMD窗口中标准输出的连续输出都可能会影响到事物。 我想我可以将Bamboo程序包装在批处理脚本中,并将输出重定向为null。
  • 很少有时候我必须重新启动服务器,我将需要以这个新用户的身份登录才能启动Bamboo。

概要:

我希望这可以帮助其他人,我也看到一些其他人在网上也有相同的问题(即使有不同的CIs /测试工具)。 我最终的解决方案可能没有必要,我想听听其他解决方案,如果人们有他们。 我听说过使用其他驱动程序而不是Chrome的可能解决方案,比如PhantomJS,但我真的想在真正的Chrome上进行测试。 我也听说过虚拟桌面,但这只是一个Linux解决方案。