在 Java 中使用 Selenium Webdriver 以不同用户身份运行 IE

Posted

技术标签:

【中文标题】在 Java 中使用 Selenium Webdriver 以不同用户身份运行 IE【英文标题】:Running IE as a different user with Selenium Webdriver in Java 【发布时间】:2013-08-02 13:18:56 【问题描述】:

有谁知道我如何使用 JAVA 使用“以不同用户身份运行”功能让 selenium 运行 IE 会话?我不知道我什至要如何设置它,而且谷歌没有提出任何东西,所以也许我在某个地方搜索错误的东西?

为了详细说明我为什么需要这样做,我正在测试的网站是一个内部平台,并使用用户登录凭据/Windows 帐户详细信息来确定他们的角色、他们拥有哪些链接、他们可以查看的数据等.

目前,我可以作为特定用户(经理、数据管理员等)运行测试的唯一方法是在运行测试之前以该用户身份登录机器。当我有多个用户帐户要测试并且正在使用 GRID2 运行 Webdriver 时,这实际上是不可能的(所以我有一组机器在队列出现时从队列中提取测试)。

手动运行测试时,我可以简单地右键单击并选择 ie 快捷方式上的“以不同用户身份运行”选项,所以我想如果我能找到一种方法在通过 webdriver 运行它时复制它,这将解决我的问题。

感谢您的任何建议或帮助。

【问题讨论】:

【参考方案1】:

也许您还可以在您的 GRID 中为不同用户设置机器,并将其反映在环境中的能力。 当然,它确实需要您的 GRID 中的更多机器。不过,我自己还没有尝试过。

【讨论】:

感谢朋友的建议,我确实考虑过这样做,但不幸的是,我已经将我的环境功能用于其预期目的(令人恼火的是,我们这里的系统设置为访问开发版您必须在 dev 域中的机器上的网站,并转到与 URL 相关的 URL,并且对于所有 envs、test、uat、preprod 等都是一样的,垃圾!)【参考方案2】:

我得到的唯一解决方案是使用机器人类打开新会话。 实际上 IE 并没有提供任何打开新会话的快捷方式,所以我们必须通过机器人来执行此操作。

此代码将为您打开一个新会话。祝你好运

    System.setProperty("webdriver.ie.driver","./IEDriverServer.exe");
    WebDriver driver = new InternetExplorerDriver();
    driver.get("http://www.google.com/");

    try
        Robot robot=new Robot();
        robot.keyPress(KeyEvent.VK_ALT);
        Thread.sleep(3000);
        robot.keyPress(KeyEvent.VK_F);
        robot.keyRelease(KeyEvent.VK_ALT);
        robot.keyRelease(KeyEvent.VK_F);
        robot.keyPress(KeyEvent.VK_I);
        robot.keyRelease(KeyEvent.VK_I);

    
    catch(Exception ex)
        System.out.println(ex.getMessage());
    

【讨论】:

【参考方案3】:

如果情况变得更糟,您可以使用不同的用户名和密码设置一个文件,读入它们,通过工厂类确定您需要的用户,然后根据您需要的参数选择每个测试的用户看着。如果你这样做,当你在多线程上运行时,它仍然会拉入正确的用户来登录。

我认为这不是您的主要目标,而至少是次要解决方案。

【讨论】:

【参考方案4】:

很可能我已经做到了。 简单的方法如果你通过 eclipse 运行 selenium。 只需通过右键单击以其他用户身份打开来打开 Eclipse IDE。

创建 Java>Runnable JAR 文件的更难方法如下文所述。

https://www.joecolantonio.com/selenium-executable-java-test/

您应该是本地计算机上的管理员才能执行此操作,并且应该拥有 Windows 帐户 iusername 和 user:userA user:userA1 等的密码。 打开多个命令提示符

C:\>runas /user:domainname\userA cmd
C:\>runas /user:domainname\userA1 cmd
C:\>runas /user:domainname\userA2 cmd

C:\>runas /user:domainname\username cmd

输入管理员密码: 正在尝试以用户 "techblogger-pc\administrator" 身份启动 cmd ... 然后在命令窗口中输入相同的 jar 文件 像 c:\runnableselenium.jar 和炸弹一样,您的所有 jar 都使用不同的凭据运行 想办法以某种方式在测试页面上查看登录的用户名。

【讨论】:

【参考方案5】:

我不知道你为什么要这样做,我不相信这是可能的。但是,我对您的最终目标做了一些猜测,并为每个目标提供了解决方案。

如果你想重新开始(没有缓存或任何东西),那么只需启动一个新的 IEDriver 实例。

如果你想用不同的设置启动它,你可以传入你的desired capabilities.

如果您还有其他完全想做的事情,请随时回复并说明您的情况。

【讨论】:

已经用更多的背景更新了我最初的问题,很抱歉我让它有点缺乏。 我看到了你的扩展解释,我相信你唯一的解决方案是使用 Java Robots 来自动化。我不相信有任何方法可以用纯硒做这样的事情。 Java 机器人?你是什​​么意思?还有,我可以做一个给我喝咖啡吗?! @:D 你也可以试试 Sikuli - 参考 sikuli.org【参考方案6】:

看来使用Windows Credential Manager 可以做到这一点。我能够手动设置站点的用户名和密码,然后使用 Selenium 驱动到那里,并且我指定的备用凭据用于身份验证。

下一步是在运行时设置凭据,powershell 应该可以做到这一点。

【讨论】:

以上是关于在 Java 中使用 Selenium Webdriver 以不同用户身份运行 IE的主要内容,如果未能解决你的问题,请参考以下文章

Selenium-java-js操作日历

[Selenium+Java] Execute JavaScript based code using Selenium Webdriver

selenium模块

webdriver--API(java版) THE FIRST PART

Python教程:selenium模块用法教程

selenium 中xpath定位的几种方式