这在单句中难以描述,所以我将在这里详细介绍。
问题:
我有一些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
答案 0 :(得分:1)
我查看了各种选项...
<强>服务强>
最初,Bamboo作为一种服务运行起来是明智的。它需要永久开启,99%的工作不需要任何形式的图形界面。除了Selenium的这一案例。
由于默认情况下服务作为SYSTEM运行,因此会话0&#34;会话0&#34; - 一个看似无头的状态 - 我曾想过启用&#34;允许服务与桌面交互&#34;在“服务”窗口中。
然而,这也没有奏效。我在线阅读也许这只是一个遗留选项。无论如何,它提供了与以前相同的行为。然后我想创造一个新的&#34;正常&#34;本地用户运行该服务,该服务可以在正常会话下运行,而不受任何图形/非交互式怪异的限制。
这再次没有用。 Bamboo运行良好,并提供了一个Web界面,但Selenium尤其仍然有同样的问题。与系统帐户不同,没有选项允许服务与桌面交互&#34;。
预定任务:
在此之后,我决定完全删除等式中的服务,并将Bamboo作为我的新本地用户的计划任务运行。我将其设置为在PC启动时运行,并且无论用户是否登录都运行。
仍然是同样的行为!
然后我发现,如果程序是在没有用户登录的情况下启动的,那么它仍然是无头的#34;并会给出同样的问题。
我终于通过在此帐户的用户登录上运行计划任务来实现它。只有当用户帐户实际登录时(并因此显示为普通桌面)才会运行Bamboo。
所以这样做最终使它成功了!它还具有以下优势:如果您通过远程桌面观看,您可以看到实时发生的操作。
在反思中,我可以看到这种最终解决方案的一些优点和缺点。
<强>优点:强>
<强>缺点:强>
<强>要点:强>
我希望这有助于其他人,我在网上看到了其他一些有相同问题的人(即使使用不同的CI /测试工具)。我最终的解决方案可能根本就没有必要,如果人们有这些解决方案,我想听听其他解决方案。我听说过使用其他驱动程序而不是Chrome的可能解决方案,例如PhantomJS,但我真的想在真正的Chrome上测试它。我也听说过虚拟桌面,但这只是一个Linux解决方案。