无法使用Robot类处理Windows 10弹出窗口

问题描述 投票:1回答:1

我试图在Internet Explorer,Windows 10中运行以下代码。

---------------------------- Test --------------- public class SampleTest {

public static void main(String args[]) throws AWTException, InterruptedException{
    System.setProperty("webdriver.ie.driver", "path//IEDriverServer.exe");
    WebDriver driver = new InternetExplorerDriver();
    driver.get("url");
    HelperMethods.validateSplash();
}

} -------------------- HelperMethods -----------

`public class HelperMethods {

public static void validateSplash() throws AWTException, InterruptedException{
    HelperMethods.ctrlV("username");
    HelperMethods.pressTab();
    Thread.sleep(2000);
    HelperMethods.ctrlV("password");
    HelperMethods.pressEnter();
}

private static void ctrlV(String stringToPaste) throws AWTException{
    Robot robot = new Robot();
    StringSelection strToPaste = new StringSelection(stringToPaste);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(strToPaste, null);            
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
}

private static void pressTab() throws AWTException{
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);
}

private static void pressEnter() throws AWTException{
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
}

}`

当我尝试在Windows 7(桌面)中运行上述脚本时,它运行正常。但是,当我尝试在Windows 10(笔记本电脑)中运行相同时,它无法正常工作。

有人可以请帮助。谢谢

java selenium-webdriver awtrobot
1个回答
2
投票

而不是像Basic Roboth那样使用像Java Robot类这样的hack,你真正想要做的就是使用代理。这是使用browserup proxy的解决方案。

首先将浏览器代理依赖关系添加到您的maven POM.xml(假设您使用的是maven,但它与Java项目相当标准)。

<dependency>
    <groupId>com.browserup</groupId>
    <artifactId>browserup-proxy-core</artifactId>
    <version>1.0.0</version>
    <scope>test</scope>
</dependency>

然后在测试中使用browserup代理。首先,您需要运行的导入如下:

import com.browserup.bup.BrowserUpProxy;
import com.browserup.bup.BrowserUpProxyServer;
import com.browserup.bup.client.ClientUtil;
import com.browserup.bup.proxy.auth.AuthType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;

然后,您应该能够复制/粘贴并尝试的示例测试是:

// Start up the browserup proxy server
BrowserUpProxy browserUpProxyServer = new BrowserUpProxyServer();
//Specify domain that uses basic auth, then the username and password followed by auth type
browserUpProxyServer.autoAuthorization("the-internet.herokuapp.com", "admin", "admin", AuthType.BASIC);
browserUpProxyServer.start();
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserUpProxyServer);

// Configure IEDriver to use the browserup proxy
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.setProxy(seleniumProxy);
WebDriver driver = new InternetExplorerDriver(ieOptions);

//Go to a site with basic auth enabled and check it all works
driver.get("https://the-internet.herokuapp.com/basic_auth");

//Clean up after test has finished
driver.quit();
browserUpProxyServer.stop();

调整autoAuthorization行以使其适用于您的域和相关的基本身份验证凭据应该是一项相对简单的工作。

使用代理的优点是:

  • 这是跨浏览器兼容的
  • 这是跨OS兼容的
  • 这将适用于本地和远程WebDriver实例(但是对于远程实例,运行浏览器的计算机将需要访问运行代理的计算机,并且您需要为代理传入有效的IP地址,而不是localhost )
  • 与各种Robot类黑客相比,尝试和点击不同的OS级别对话框的代码要少得多。
© www.soinside.com 2019 - 2024. All rights reserved.