如何使用IE11在Selenium 3.6中执行shift单击

时间:2017-10-30 08:04:00

标签: java selenium

public void shiftClick() {
    if(WebBrowser.isInternetExplorer()) { 
        try {
            Robot robot = new Robot();
            try {
                WindowManagement.setBrowserFocus();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            robot.keyPress(KeyEvent.VK_SHIFT);
            this.clickElement();
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (AWTException e) {
            throw new AssertionError(e.getMessage());
        }

    } else { 
        Actions actions = new Actions(Browser.getWebDriver(null));
        actions.keyUp(Keys.SHIFT).click(this.getWebElement()).keyUp(Keys.SHIFT).perform();
    }
}

将selenium从2.53升级到3.6.0后,转换点击不起作用。我尝试过AWT机器人方法,并尝试了Action键方法。有没有其他方法可以执行班次点击?

1 个答案:

答案 0 :(得分:0)

在IE中使用WebDriver的提示(您可以找到一些here):

  • 在IE选项中禁用Enhanced Protected Mode
  • 将浏览器缩放级别设置为100%
  • 对于Windows 10,您还需要在显示设置中将“更改文本,应用和其他项目的大小”设置为100%。
  • 仅对于IE 11,您需要设置一个注册表项 - 创建一个名为iexplore.exe的值为0的DWORD值:
    • 对于32位Windows:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
    • 对于64位Windows:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
  • 将每个区域的保护模式设置设置为相同的值
  • 使用requireWindowFocus选项
  • 尝试启用enableNativeEvents,有时可以帮助
  • 始终最大化IE窗口
  • 在点击之前滚动到元素以使元素在屏幕内可见,如果元素在IE窗口之外则单击 通常不起作用

IE11 Windows 10 WebDriver 3.6.0的工作示例 对于此页面:w3schoold click whith SHIFT key pressed
其中显示了在单击元素时如何检测是否按下了SHIFT键。

WebDriver driver= null;
try{
    InternetExplorerOptions opt =  new InternetExplorerOptions();
    // opt.enableNativeEvents();
    opt.requireWindowFocus();

    driver=new InternetExplorerDriver(opt);

    driver.manage().window().maximize();

    driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_dom_event_shiftkey");

    final By clickOnThis = By.xpath("//p[ text() = 'Click on this paragraph. An alert box will tell you if you pressed the shift key or not.'  ]");
    final By message = By.xpath("//p[ text() = 'The shift key was pressed!' ]");

    WebDriverWait wait = new WebDriverWait( driver, 5 );

    driver.switchTo().defaultContent(); 
    driver.switchTo().frame("iframeResult");

    WebElement clickOnMe = wait.until(ExpectedConditions.visibilityOfElementLocated(clickOnThis));

    Actions actions = new Actions( driver );

    actions.keyDown(Keys.SHIFT).click(clickOnMe).keyUp(Keys.SHIFT);
    actions.build().perform();

    wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(message));

    System.out.println("SHIFT-cLick detected");

    Thread.sleep(5000);
}finally {
    if(driver!=null) {
        driver.quit();
    }
}