从CI

时间:2017-05-29 08:56:22

标签: windows google-chrome selenium selenium-webdriver selenium-chromedriver

这在单句中难以描述,所以我将在这里详细介绍。

问题:

我有一些Selenium测试,当它们在本地运行时,它完全正常。

当我通过 Bamboo (由于它是 SYSTEM 用户在 Windows 计算机上运行时)出现问题一项服务),其中一项测试失败。

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

我将来的工作是让网站完全响应,但目前我仍然希望确保Bamboo使用我指定的尺寸。

问题:

通过 SYSTEM 运行Bamboo可能会导致Seleium出现任何问题吗?这是我在本地和CI运行之间可以看到的唯一区别。还有其他可能性吗?

其他信息:

我如何设置屏幕大小

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

Chrome驱动程序Version 29

NUnit Version 3.6.1

Selenium网络驱动程序Version 3.4.0

1 个答案:

答案 0 :(得分:1)

我查看了各种选项...

<强>服务

最初,Bamboo作为一种服务运行起来是明智的。它需要永久开启,99%的工作不需要任何形式的图形界面。除了Selenium的这一案例。

由于默认情况下服务作为SYSTEM运行,因此会话0&#34;会话0&#34; - 一个看似无头的状态 - 我曾想过启用&#34;允许服务与桌面交互&#34;在“服务”窗口中。

service screenshot

然而,这也没有奏效。我在线阅读也许这只是一个遗留选项。无论如何,它提供了与以前相同的行为。

然后我想创造一个新的&#34;正常&#34;本地用户运行该服务,该服务可以在正常会话下运行,而不受任何图形/非交互式怪异的限制。

alternate user

这再次没有用。 Bamboo运行良好,并提供了一个Web界面,但Selenium尤其仍然有同样的问题。与系统帐户不同,没有选项允许服务与桌面交互&#34;。

预定任务:

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

仍然是同样的行为!

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

我终于通过在此帐户的用户登录上运行计划任务来实现它。只有当用户帐户实际登录时(并因此显示为普通桌面)才会运行Bamboo。

所以这样做最终使它成功了!它还具有以下优势:如果您通过远程桌面观看,您可以看到实时发生的操作。

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

<强>优点:

  • 有效......
  • 如果我远程进入
  • ,我可以看到Selenium在我眼前操作

<强>缺点:

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

<强>要点:

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