【问题标题】:Selenium Remote Driver - NoSuchElementException is occurred during implementation of InternetExplorerDriverSelenium 远程驱动程序 - 在 InternetExplorerDriver 的实施过程中发生 NoSuchElementException
【发布时间】:2016-11-24 16:52:30
【问题描述】:

目前正在使用 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'

【问题讨论】:

  • ignoreProtectedModeSettings,请在进行任何更多调试之前删除它。

标签: java eclipse selenium internet-explorer screenshotexception


【解决方案1】:

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

一种可能的解释是,在您提供的示例中,您使用的是“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();
    }

}

【讨论】:

  • 嗨米兰尼奥,我想你误解了这个问题,我在远程驱动程序中执行时遇到了问题。为了进行交叉检查,我已将远程驱动程序更改为 Web 驱动程序,并且使用 IE 浏览器脚本在本地通过,没有任何问题。当我使用远程驱动程序执行时,只会出现问题。
  • 嗨@chanduk,我刚刚更新了测试以通过远程webdriver运行(见上文-测试ClickSignInInInternetExplorerThroughRemoteDriver),它通过了IE8和IE10。远程机器上的 IE 是什么版本?你能看到那台远程机器的屏幕吗?你确定那个按钮真的在那里吗?
  • 嗨@milano,我正在使用带有远程驱动程序的IE 11(使用code.google.com/p/selenium/wiki/InternetExplorerDriver配置)。我能够看到远程驱动程序的屏幕。 driver.get 语句执行成功。我已经举了谷歌网站作为例子。
  • 嗨@chanduk,我完全改变了答案,因为问题不再与CssSelectors相关。我刚刚使用 IE11 和 IE10 运行了测试,它们通过了谷歌页面。它会在 IE8 上失败,因为谷歌页面在 IE8 上看起来不同。
  • 嗨,milano,您是在本地执行还是在远程执行(我的意思是另一台不同的机器)。对于 IE 你做了什么设置。你也可以给连接字符串来启动节点。我对你的代码有一个疑问,你没有指定你正在执行哪个节点。
【解决方案2】:

感谢您的回复。

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

  1. Windows 更新 KB3025390 导致问题
  2. 添加了功能。setCapability("nativeEvents",false);

WebDriver test not running on IE11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2015-09-17
    • 2013-12-19
    • 2017-04-09
    相关资源
    最近更新 更多