长时间的解释来了,但我越希望提供更好的机会,有人做了类似的事情。
我目前正在开发一个测试解决方案,以测试一个使用windows凭据登录应用程序(Visual、C#、Seleno、MSTest)的web应用程序。这些凭据可以存储在windows保险库中,internet选项可以设置为自动登录,也可以通过将它们输入警报框。大多数测试使用不同的用户,因为他们在应用程序中有不同的权限。
警报框不是标准的javascript警报,而是由浏览器皮肤显示的窗口提示符。我从自动化解决方案中解决了这一问题,方法是将凭据推入windows保险库,并使用当前用户名和密码配置internet选项,以便自动登录,但最近我实现了Selenium Grid,用于并行测试,作为CI管道的一部分,而不是我们与Microsoft的分布式方法。
听起来很简单,但结果却不是
以前,使用MTM,dll被分发到每个Test,并由一个测试控制器管理。我们有一个类,可以将凭据推入窗口库,以便为每台机器工作。使用Grid,这些将被推入主机器库,而不是节点。我曾计划使用PowerShell在节点上添加凭据,因为在创建浏览器实例之前就需要这样做,但是selenium网格并没有告诉用户它正在执行测试的节点。
我尝试使用selenium与警报交互,但是当导航到应用程序时,页面会不断加载,直到输入凭据,这样selenium GoToUrl()方法就会被循环捕获。如果使用超时停止该方法,则警报将消失。(可以通过在浏览器中按X按钮手动重新创建以停止页面加载)
我更改了方法,并使用SessionID的RemoteWebDriver向selenium中心发送了rest请求,以获取正在执行测试的所有机器的主机名。既然有了节点,就可以使用远程PowerShell更新凭据存储。正如我在一开始所说的,大多数测试使用不同的用户,所以我也需要网格来告诉我哪个测试也在主机上执行,但是我找不到一种方法让网格中心告诉我它正在以编程方式运行哪些测试
总之,我想:
从Selenium网格获取当前测试会话的节点
获取在每个节点上运行的测试名称
一旦我拥有了这两者,我就可以通过远程PowerShell发送适当的用户详细信息。
如果有人做过类似的事情或有任何建议,那将是非常感谢的。
谢谢
G
发布于 2017-10-07 14:01:43
从Selenium网格获取当前测试会话的节点
要查找将测试路由到的节点,可以执行以下操作:
RemoteWebDriver创建新的driver.getSessionId()实例后检索当前会话id (这是我在driver.getSessionId()中所做的)http://localhost:4444/grid/api/testsession?session=<SessionIdGoesHere>,并从响应有效负载中提取节点的远程主机和端口号。你可以在我的博客文章这里上读到更多有关这方面的内容。
获取在每个节点上运行的测试名称
我不知道你在这里所说的测试名称是什么。在Selenium Grid世界中,没有测试名称的概念。所有这些都归结为一个会话id,它指示/表示正在运行的测试。
https://stackoverflow.com/questions/46595104
复制相似问题