java - 将焦点设置为通过 Selenium Webdriver 登录以使机器人工作

标签 java selenium

我正在测试一个只能通过 Internet Explorer 访问的内部网站,该网站使用 Windows 身份验证来验证用户凭据,并且必须测试多个帐户,因此我需要能够以不同的方式“登录”该网站人们(我之前考虑过让几台机器分别以相关帐户登录,但无法做到这一点)。

如果我以 webdriver 帐户身份访问该页面,我会看到一个标准的 Internet Explorer“Windows 安全”弹出窗口,我可以在其中毫无问题地输入我的登录详细信息。到目前为止唯一的问题是 webdriver 无法识别弹出窗口。

我想我可以使用 Java Robot 类来做到这一点,并且已经删除了一些我发现插入我的 Selenium webdriver 脚本的代码,它几乎工作,问题是它只有在我手动时才工作单击显示的登录窗口以复制并粘贴详细信息(请参阅下面的代码)。关于如何在复制和粘贴之前使用 Selenium 或机器人将焦点设置在该对象上,有什么建议吗?

public Boolean loginDetails(individualThreadSession threadSesh){
        Action myAction = new Action();
        final String USERNAME= "loginID";
        final String PASSWORD= "myPassword";
        myAction.simpleWait(1);

        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {e.printStackTrace();}

        type(robot, USERNAME);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_TAB);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_TAB);

        myAction.simpleWait(1);

        type(robot, PASSWORD);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_ENTER);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_ENTER);
        myAction.simpleWait(1);

        return(true);
    }

    public static void type(Robot robot, String characters) {
        Action myAction = new Action(); 
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        StringSelection stringSelection = new StringSelection( characters );
        clipboard.setContents(stringSelection, null);

        robot.keyPress(KeyEvent.VK_CONTROL);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_V);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_V);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        myAction.simpleWait(1);
    }

我也尝试过只输入单独的按键而不是复制和粘贴信息,但这也确实有效,我需要在它起作用之前给予屏幕焦点......:S

也尝试过此操作,但仍然没有将焦点放在 Windows 安全对话框上...

Alert aa = threadSesh.driver.switchTo().alert();
aa.sendKeys(USERNAME);

最佳答案

这是因为焦点不在身份验证窗口上。您不能在 Robot 中尝试 ALT+TAB,因为它不是一个单独的窗口。对于您的场景,我认为“AutoIT”可能是合适的解决方案。如果您想继续使用 AutoIT,请告诉我我可以发送一些示例代码。

import java.io.Serializable;
import com.sun.jna.WString;

public interface AutoITX extends com.sun.jna.Library, Serializable {

public static int AU3_INTDEFAULT = -2147483647;

public int AU3_WinWaitActive(WString szTitle, WString szText, int nTimeout);

    }

为 AutoITX 创建一个对象,例如 objAutoIT。使用以下参数调用 WinWaitActivate()。 根据您的要求替换 windowTitle、windowText(可以为空)、waitTime。

    objAutoIT.AU3_WinWaitActive(WString(windowTitle), WString(windowText), waitTimeInSecs);

关于java - 将焦点设置为通过 Selenium Webdriver 登录以使机器人工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912761/

相关文章:

java - 在Android中计算两次之间的差异

java - Android pdf maker 代码错误

java - 将方法返回类型设置为 'void' 。不太明白

java - JSP中如何使用bean?

java - 为什么我的 Guava 缓存不断覆盖项目?

java - 构建 Maven selenium 应用程序时无法访问 Function

python - 如何使用 Selenium 更改元素类属性值

python - Selenium xpath 元素属性

java - 计算 html 源中的元素数

c# - Selenium - PhantomJS TypeError - 未定义不是构造函数(评估 '_getTagName(currWindow).toLowerCase()')字符串