我正在尝试清理围绕我们的 UI 自动化测试的流程。
现在我们有一个在服务器上运行的控制台应用程序,它使用 Apache Thrift 监听 RPC 调用,根据正在运行的测试,该应用程序将使用用户指定的浏览器(Chrome、IE、Firefox)启动 Selenium ) 或者它将启动我们的 WPF 桌面应用程序。
我的目标是让这个控制台应用程序作为 Windows 服务运行,用于几个目的:
- 不再需要用户登录到服务器。
- 不再需要第三方应用来阻止屏幕保护程序激活。
- 将有效地允许在农场中运行测试,以便可以并行运行多个测试
所以我的问题是提供了一个没有事件用户 session 并且该服务正在运行的服务器,该服务是否可以通过 Web 浏览器和 WPF 应用程序同时启动 Selenium 并能够继续驱动它们。
如果不可能,以编程方式登录服务器怎么样?
最佳答案
您可以做到这一点的唯一方法是使用 PhantomJS(或其他一些 headless 浏览器)。 Windows 服务无法访问桌面上正在运行的浏览器(尽管在 Windows XP 和 Windows 2000 Server 时代它们曾经这样做过)。从那时起,即使您在该服务上看到“与桌面交互”复选框,微软也锁定了这些权限,我认为它不会起作用。
此外,Selenium Grid 服务器必须在远程服务器的前台运行(出于同样的原因)。唯一的异常(exception)是,在网格上使用 PhantomJS,您的网格服务器可以作为启动 headless 浏览器的服务运行。当然,将网格节点作为服务运行并将网格集线器作为服务运行并不是一件容易配置的事情(使用 YAJSW),但它是可行的。如果你走那条路,你的里程可能会有所不同,因为我还没有真正尝试过。这个想法是您可以编写批处理 DOS 脚本来启动/注册 YAJSW 以将网格作为服务运行。
关于c# - windows服务驱动的UI自动化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981614/