IE7 - 使用Selenium的NoSuchElementException

时间:2013-11-12 15:01:42

标签: java internet-explorer xpath selenium

我正在尝试在Windows XP上使用InternetExplorerDriver的IE7上的Selenium。在兼容模式下(W7),此代码适用于Firefox,IE9甚至IE9。

HTML:

<HTML xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE></TITLE></HEAD>
<BODY>
<div id="login">chicken</div>
</BODY>

建立驱动程序:

private static WebDriver getIE7WebDriver() {
    WebDriver driver = null;
    DesiredCapabilities capabilities;
    capabilities= DesiredCapabilities.internetExplorer();
    capabilities.setCapability(InternetExplorerDriver.FORCE_CREATE_PROCESS, false);
    capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true);
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS,true);
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "internet explorer");
    capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
    capabilities.setCapability(CapabilityType.VERSION, "7");

    System.setProperty("webdriver.ie.driver",(new File("C:\\selenium\\IEDriverServer.exe")).getAbsolutePath());
    try {
        driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return driver;
}

尝试获取#index元素:

log.info(driver.getPageSource());

try {
    String value = driver.findElement(By.cssSelector("#login")).toString();
    log.info(value);
}
catch ( Exception e ) {
    log.error(e.toString());
}

页面源是正确获取的,但只要我尝试访问一个元素,我就会获得org.openqa.selenium.NoSuchElementException。我也尝试过idXPath

知道出了什么问题?

PS:在Windows XP中,IE没有安全模式。

编辑:driver.getPageSource()返回:

<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"><HEAD><TITLE></TITLE></HEAD>
<BODY>
<DIV id=login>chicken</DIV></BODY></HTML>

2 个答案:

答案 0 :(得分:1)

好的 - 根据评论,您指定您没有针对集线器运行,但是,在您的代码中 - 您指向集线器。我认为这与此有关。

更改此代码块:

try {
    driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

为:

driver = new IEDriver(capabilities);

RemoteWebDriver(new URL("http://localhost:4444/wd/hub")这篇文章将您的测试指向一些远程驱动程序,这意味着“连接到集线器的硒节点”。您已经确认您没有使用集线器,因此应该 解决您的问题。

细分:

RemoteWebDriver() = Selenium Node that is connected to a hub
ChromeDriver|IEDriver|FirefoxDriver = Local browser session

答案 1 :(得分:1)

对于IE 7 selenium服务器版本2.20或以下应该试一试。最近我们面临类似的问题,其中几乎没有命令在IE 10中工作但在IE 8中没有工作。当我们降级到selenium 2.20(逐个尝试)并且它对于IE 8以2.20工作正常。如果您正在使用集线器,那么请确保运行selenium服务器的节点具有较早的运行的vesion(<2.20)。