Selenium Grid和RemoteWebDriver

时间:2015-04-12 22:37:58

标签: java selenium selenium-webdriver selenium-grid

我有一个用Java编写的应用程序,用于在特定网站上创建电子邮件帐户。出于某些原因,我需要在不同的Windows用户帐户下运行程序的每次迭代。

我正在使用Selenium Grid(RemoteWebDriver)从中心服务器连接到远程服务器(Grid)。

假设我在远程Windows服务器上设置了多个Windows用户帐户(例如“account639”,“account729”,“account889”等),我希望我的集线器分别连接到每个帐户并执行Java代码

我的问题是:如何指定应在Grid服务器中执行代码的Windows用户帐户?

据我所知,我可以添加到RemoteWebDriver的两个参数是远程服务器的主机名(或IP)和端口。我没有看到任何选项来指定它应在哪个Windows用户帐户下运行。

由于远程服务器下的所有Windows用户帐户的主机名(IP)相同,我如何告诉“集线器”每次都在不同的Windows用户帐户下执行代码段?

我看到的唯一可能是在不同的端口下运行Selenium Grid的每个实例,并使用端口号作为区分两个Windows用户帐户的方法(并确保我同时登录到两个用户帐户)时间)。

例如,我可以在“account639”上设置Selenium Grid以侦听端口6399,例如“account729”侦听端口“7299” - 这样我知道代码正在相应的Windows帐户下执行

这可行吗?有没有更直接的方法在不使用端口的情况下执行此操作(即,是否可以指定集线器应该连接到哪个Windows用户帐户,就像我指定端口一样?)

2 个答案:

答案 0 :(得分:1)

使用每个Windows用户登录并在不同端口上的每个帐户下运行selenium节点(例如:5555,5556,5557)。 如果每个节点具有相同的设置,我的意思是相同的浏览器,相同的浏览器版本等...您可以使用“applicationName”,这是一个受支持但未记录的额外功能。使用此功能,您可以区分节点。例如,在您的nodeConfig中:

...
{
    "applicationName":"account639",
    "platform":"WINDOWS",
    "browserName":"chrome",
    "maxInstances":5,
    "version":"40",
    "seleniumProtocol":"WebDriver"
},
...

之后,您可以设置RemoteWebDriver以在属于特定widows用户帐户的特定节点上运行测试。例如:

DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("applicationName", "account639");
...
WebDriver driver = new RemoteWebDriver(new URL(this.getHubUrl()), dc);

如果您想使用更多额外功能,您可以创建自己的自定义功能匹配器(在Google中搜索它:“selenium grid custom capability matcher”),但如果您只需要一个额外功能,我建议您使用提到了一个。

希望这有帮助。

答案 1 :(得分:0)

Selenium Grid在技术上不可行。 但是,您可以创建一个包含selenium网格的Windows服务。

安装Windows服务后,您可以选择要将服务运行的对象。

这是一篇关于如何将Windows服务作为帐户运行的文章: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sys_srv_logon_user.mspx?mfr=true

我想你可以通过在不同的端口上安装多个Windows服务来实现你想要的,作为不同的用户。