【问题标题】:Get a NoSuchElementException for InternetExplorerDriver using Selenium使用 Selenium 为 InternetExplorerDriver 获取 NoSuchElementException
【发布时间】:2015-05-25 06:01:36
【问题描述】:

我通过执行下面的代码得到以下异常。该代码适用于 FirefoxDriver,只有 InternetExplorerDriver 失败。 我现在还添加了 HTML 和 Java 代码。

例外:

org.openqa.selenium.NoSuchElementException: Unable to find element with id == devices_Number (WARNING: The server did not provide any stacktrace information)

Command duration or timeout: 316 milliseconds

For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:03:00'

System info: host: 'ICA4502', ip: '192.168.5.37', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_09'

Session ID: dac482ae-dba1-4d57-807c-de22e443f9b1

Driver info: org.openqa.selenium.ie.InternetExplorerDriver

Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=9, ie.usePerProcessProxy=false, ignoreProtectedModeSettings=false, cssSelectorsEnabled=true, requireWindowFocus=false, initialBrowserUrl=http://localhost:40748/, handlesAlerts=true, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}]

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

       at java.lang.reflect.Constructor.newInstance(Constructor.java:525)

       at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)

       at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)

       at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)

       at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)

       at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)

       at org.openqa.selenium.By$ById.findElement(By.java:214)

       at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)

       at com.java.selenium.example.SeleniumTest.startTest(SeleniumTest.java:30)

       at com.java.selenium.example.SeleniumTest.main(SeleniumTest.java:15)

 

下面是html文件Test.Html

 

<html>

<head>

<title>Multi select Drop Down List Box</title>

</head>

<body>

<p>What all devices do you listen to music on?</p>

<BR>

<INPUT id="devices_Number" name="devices_Number_n"  maxLength="10" value="Devices Number" >

<INPUT id="devices_Name" name="devices_Name_n"  maxLength="10" value="Devices Name" >

<INPUT id="devices_Made" name="devices_Made_n"  maxLength="10" value="Devices Made By" >

<INPUT id="devices_Version" name="devices_Version_n"  maxLength="10" value="Devices Version" >

</body>

</html>

 

以下是 selenium java 文件 SeleniumTest .java

 

package com.java.selenium.example;

 

import java.io.File;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.ie.InternetExplorerDriver;

 

/**

*

 * @author

 *

*/

public class SeleniumTest  {

           

            private static WebDriver driver = null;

            private final static String URL= "D:\\Selenium\\Text.html";

            private final static String IE_DRIVER = "D:\\Dev_Env\\Tester\\driver\\IEDriverServer_2.44\\IEDriverServer.exe";

            /**

            * main method

            * @param args

            * @throws Exception

            */

            public static void main(String[] args) throws Exception {

                        startTest();

            }

           

            /**

            *  startTest

             */

            private static void startTest() {

                        try {

                                    System.setProperty("webdriver.ie.driver", new File(IE_DRIVER).getAbsolutePath());

                                    //driver = new InternetExplorerDriver();

                                    driver = new FirefoxDriver();

                                    Thread.sleep(2000);

                                    driver.get(URL);

                                    Thread.sleep(2000);

                                   

                                    driver.findElement(By.id("devices_Number")).clear();

                                    Thread.sleep(200);

                                    driver.findElement(By.id("devices_Number")).sendKeys("123456");

 

                        } catch (Exception e ) {

                                    e.printStackTrace();

                        }

            }

}

【问题讨论】:

  • 这里的 ID 看起来不对:driver.findElement(By.id("devices_Number")).clear();
  • 更好的解释和清理

标签: java html selenium selenium-webdriver


【解决方案1】:

试试下面的

WebDriverWait driverWait = new WebDriverWait(driver,30000);          
driverWait.until(ExpectedConditions.presenceOfElementLocated(By.id("devices_Number")));

【讨论】:

  • 您好,谢谢,这是有效的......请解释visibilityOfElementLocated和presenceOfElementLocated之间的区别是什么,可以优先考虑
  • @SANECE04 presenceOfElementLocated 会稍微快一些,因为它只是检查页面上的元素存在,而visibilityOfElementLocated 必须检查存在以及元素是否可见。您可以参考selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/…了解更多信息......如果您认为它解决了问题,请标记答案正确(✓)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多