使用Selenium IEDriverServer进行非常慢的文本输入?

时间:2017-09-21 18:59:03

标签: java selenium selenium-webdriver selenium-iedriver iedriverserver

运行Selenium IEDriverServer 3.5.1 32位,我在Internet Explorer v11中遇到非常非常慢的文本输入。奇怪的是,如果我切换到IEDriverServer 3.4.0(也是32位)它并不慢,但整体测试执行速度有所降低(这个问题仅在几天前出现,奇怪的是。之前我使用的是3.5.1没有问题)。有没有人找到这个问题的合法解决方案?这是我的webdriver定义:

DesiredCapabilitiescaps = DesiredCapabilities.internetExplorer(); 
caps.setBrowserName("internet explorer"); 
caps.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false); 
caps.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true); 
caps.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false); 
caps.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true); 
caps.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); 
caps.setJavascriptEnabled(true);

此外,在IE本身,我有以下设置:

  • 所有安全区域都设置为保护模式ON
  • 高级>安全>未选中“为增强保护模式启用64位进程”。
  • 连接> Lan设置>未选中自动检测设置

每当我搜索这个问题时,我都会找到一年前的答案,通常与Selenium 2.53或类似内容有关。最近有没有人经历过这个,如果有的话,它是如何解决的?谢谢!

3 个答案:

答案 0 :(得分:2)

当您在IE中使用64位和32位进程的混合模式时,会出现输入速度慢的问题。
假设您使用64位版本的驱动程序: 解决方案是使用32位版本的IEDriverServer 3.5.1。

答案 1 :(得分:1)

对于IE,sendKeys的性能不佳,所以在我的情况下,我创建了以下解决方法来将文本设置为元素:

@Override
public boolean setValue(String text) {
    logger.info(String.format("<%s(%s) set value '%s'", el.getTagName(), el.getText(), text));
    try {
        JavascriptExecutor js = (JavascriptExecutor) webElementFinder.getDriver();
        js.executeScript("arguments[0].value = arguments[1];",
                waitForElementVisible(config.getBrowserElementFinderTimeout()), text);
        return true;
    } catch (TimeoutException e) {
        logger.warn(e.getMessage());
        logger.warn(
                String.format("<%s(%s) Element not visible within timeout period", el.getTagName(), el.getText()));
        return false;
    }
}

答案 2 :(得分:0)

你必须使用32位IEdriver。

请浏览此链接以获取更多信息:

<强> https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5116