Selenium Remote Driver - NoSuchElementException 在 InternetExplorerDriver 的实现过程中发生

Selenium Remote Driver - NoSuchElementException is occurred during implementation of InternetExplorerDriver

目前正在使用 selenium 远程驱动程序。使用 Chrome 远程驱动程序可以正常执行,但不能使用 IE。在显示 NoSuchElementException

之后启动 IE 浏览器

我在下面 url 发现了类似的问题,我实施了所有指定的解决方案仍然不适合我。 NoSuchElementException is occurred during implementation of InternetExplorerDriver in Selenium WebDriver

启动了 Selenium 网格 - 集线器使用:(机器 A):

java -jar selenium-server-standalone-2.44.0.jar -role hub  

启动了 Selenium 网格 - 节点使用:(机器 B):

java -jar selenium-server-standalone-2.44.0.jar -role webdriver -hub http://xx.x.xx.xx:4444/grid/register -port 5566 -browser browserName="internet explorer",version=8.0,platform=WINDOWS -Dwebdriver.ie.driver=\SeleniumDrivers\IEDriverServer.exe

测试脚本中的代码。(Eclipse)

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setBrowserName("internet explorer");
capabilities.setPlatform(Platform.WINDOWS);             
capabilities.setCapability("ie.ensureCleanSession", true);    
capabilities.setCapability("forceCreateProcessApi", true);
capabilities.setCapability("ignoreProtectedModeSettings", true);
System.setProperty("webdriver.ie.driver", "\SeleniumDrivers\IEDriverServer.exe");
WebDriver driver = new RemoteWebDriver(new URL("http://MachineBIPAddress:5566/wd/hub"),capabilities);    

//示例代码。

driver.get("www.google.com");
driver.findElement(By.id("gbqfqw")).sendKeys("test");
driver.findElement(By.name("btnG")).click();

执行期间:

IE browser is launched in Machine B and then error "org.openqa.selenium.NoSuchElementException:" displayed.


log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == a[class*='searchbtn'] (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.13 seconds
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:02:37'
System info: host: 'xxxxxxx', ip: 'xxx.xx.xx.xx', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_31'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=true, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:27297/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=true, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=dismiss}]
Session ID: 445a8c44-fb7c-4f05-8b5a-f025787ffea5
Command duration or timeout: 23.98 seconds
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: 'xxxxxx', ip: 'xx.x.xxx.xx', os.name: 'Windows Server 2008 R2', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_31'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities [{browserAttachTimeout=0, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=true, elementScrollBehavior=0, ie.browserCommandLineSwitches=, webdriver.remote.sessionid=5daa42d6-5f04-46ac-821a-59dcb261edd1, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:27297/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=true, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=dismiss}]
Session ID: 5daa42d6-5f04-46ac-821a-59dcb261edd1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    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.findElementByCssSelector(RemoteWebDriver.java:441)
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:426)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)
    at dashBoard_Automation.dashboardSerach.main(xxxx.java:86)
Caused by: org.openqa.selenium.remote.ScreenshotException: Screen shot has been taken
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:03:00'

我刚刚在 IE8、IE10 和 IE11 上测试过你的测试。在 IE10 和 IE11 上一切正常。 IE8 无法在 google 页面上运行,因为按钮将隐藏在快速搜索结果下。

一种可能的解释是,在您提供的示例中,您使用的是 "btnG" 按钮。该按钮仅在您键入一些文本后才可见。可能需要等到显示按钮。

你能在你的测试机器上手动测试并检查 "btnG" 是否真的存在吗?

更新:所有机器都是安装了适当版本IE的虚拟机。测试机设置为通过

启动 selenium 服务器

javaw.exe -Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.ie.driver="IEDriverServer.exe" -Dphantomjs.binary.path="phantomjs.exe" -jar selenium-server-standalone-2.41.0.jar -port 4444

[TestCase("IE8", "http://xxx-xxx-tuai04:4444/wd/hub")]
[TestCase("IE10", "http://xxx-xxx-tuai01:4444/wd/hub")]
[TestCase("IE11", "http://xxx-xxx-tuai02:4444/wd/hub")]
public void ClickSignInInInternetExplorerThroughRemoteDriver(string version, string url)
{
    using (var driver = new RemoteWebDriver(new Uri(url), DesiredCapabilities.InternetExplorer()))
    {

        driver.Navigate().GoToUrl("https://www.google.com/?gws_rd=cr,ssl&fg=1");
        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

        var element = driver.FindElementById("gbqfqw");
        element.SendKeys("test");

        var btn = driver.FindElementByName("btnG");
        btn.Click();
    }

}

感谢您的回复。

最后我发现了两个在 IE 11 中测试失败的原因。现在解决了它们

  1. Windows 更新 KB3025390 导致问题
  2. 已添加 capabilities.setCapability("nativeEvents",false);