web-dev-qa-db-ja.com

NoSuchElementExceptionは、Selenium WebDriverでのInternetExplorerDriverの実装中に発生します

現在、WebDriverでIEブラウザを呼び出してテストを実行しています。ただし、以下の簡単な例を実行しようとするとNoSuchElementExceptionを受け取りました。

ただし、ChromeドライバーまたはFirefoxドライバーを使用した場合、コードは正常に機能しました。任意のアイデアや考えをいただければ幸いです。

瓶:Selenium-server-standalone-2.5.0.jar

コード:

import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.ie.InternetExplorerDriver;
import org.openqa.Selenium.remote.DesiredCapabilities;

public static void main(String[] args) throws InterruptedException {
  DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
  ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
  WebDriver driver = new InternetExplorerDriver(ieCapabilities);
  driver.get("www.google.com");
  driver.findElement(By.name("q"));
}

エラーメッセージ:

Exception in thread "main" org.openqa.Selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information)
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:29:57'
System info: os.name: 'Windows 7', os.Arch: 'x86', os.version: '6.1', Java.version: '1.6.0_25'
Driver info: driver.version: RemoteWebDriver
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at Java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.Selenium.remote.ErrorHandler.createThrowable(ErrorHandler.Java:131)
    at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:105)
    at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:409)
    at org.openqa.Selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.Java:197)
    at org.openqa.Selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.Java:246)
    at org.openqa.Selenium.By$ByName.findElement(By.Java:298)
    at org.openqa.Selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.Java:189)
    at lib.WebDriver2.main(WebDriver2.Java:14)
16
user836112

IEの保護モード設定を設定する必要がないことを明示的に回避しました。それがInternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINSケーパビリティ設定は行います。この機能設定を削除し、保護モード設定を project wiki に記載されているように設定すると、問題は自動的に解決するようです。

14
JimEvans

以下のように暗黙的に待機を追加してみてください。また、ロバートが言ったように、あなたのURLはhttp://

WebDriver driver = new InternetExplorerDriver(ieCapabilities);
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
5
nilesh

プロジェクトWebサイトに短い FAQエントリ がありました(Selenium 2.9年頃にコピー):

InternetExplorerDriverでは、すべてのセキュリティドメインが同じ値(信頼されているか信頼されていない)に設定されている必要があります。セキュリティドメインを変更する立場にない場合は、次のようにチェックを上書きできます。

DesiredCapabilities capabilities =
DesiredCapabilities.internetExplorer();
capabilities.set(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true); 
WebDriver driver = new InternetExplorerDriver(capabilities);

定数の名前からわかるように、これはテストに不安定さをもたらす可能性があります。すべてのサイトが同じ保護ドメイン内にある場合、問題はありません。

並列C#InvalidOperationExceptionメッセージ:

Internet Explorerの起動時に予期しないエラーが発生しました。保護モードは、すべてのゾーンで同じ値(有効または無効)に設定する必要があります。 (NoSuchDriver)

IEの設定を調整する代わりにC#(2016年2月の時点での推測)):

var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions {
                IntroduceInstabilityByIgnoringProtectedModeSettings = true };
using (var driver = new InternetExplorerDriver(ieOptions))
{

これはすべて、Selenium課題追跡の issue 1795 の一部でした。

2
user423430