2011-09-02 8 views
16

現在、私はWebDriverでIEブラウザを呼び出してテストを実行しています。しかし、私はNoSuchElementExceptionを受け取りました。私は以下の簡単な例を実行しようとしました。Selenium WebDriverでInternetExplorerDriverを実装中に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) 
+0

そのスタックトレース/エラーメッセージが不完全なように見えますが、完全であることを確認してください。 – Jasper

+0

こんにちは、エラーメッセージを更新しました:) IEブラウザが開かれ、Googleページに移動しました。しかし、それは要素 "q"を見つけることを試みたので失敗しました – user836112

+0

同じ問題がここにあります。私は64ビットシステムを使用していますが、32ビットのjv​​mを使用しているので、ドライバも32ビットです。以下に挙げるものは役に立ちません –

答えて

14

。それがInternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINSの機能の設定です。この機能の設定を削除し、保護モードの設定をproject wikiに記載されているように設定すると、問題が解決されるようです。

+0

こんにちはジム。ソリューションに感謝します。セキュリティ設定を変更する権限はありません。回避策はありますか?ありがとう! – sbose

+0

機能**は**回避策です。 [このブログの記事](http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html)には、保護モードの設定が重要な理由とその理由彼らはあなたが設定を変更することを許可していない場合、あなたの仕事を完了する能力を積極的に妨害しています。 – JimEvans

5

は、暗黙的に以下のように待って追加してみてください。ロバートが言ったようにまた、あなたのURLは、httpを持っている必要があります:あなたは明示的にIEの保護モード設定を設定する必要が避けてきました//

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

こんにちはNilesh、ありがとうございます。しかし、その解決策は私のためには機能しません。 – user836112

+0

例外から回復するには、代わりに.ignoring節を使用してFluentWaitを使用する必要があるからです。 – djangofan

2

短いFAQ entryが(年頃セレン2.9をコピーした)プロジェクトのウェブサイトにありました:

InternetExplorerDriverは、あなたがしている場合は、すべてのセキュリティドメインが同じ値(trustedまたはuntrusted)に に設定されている必要があります定数の名前で言われるように、これはflakineを導入することができる、

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

:セキュリティ・ドメインを変更する 位置に、あなたは、このような チェックを無効にすることができませんあなたのテストでss 。すべてのサイトが同じ保護ドメインに属している場合は、 は大丈夫です。

並列C#の例外InvalidOperationExceptionメッセージ:Internet Explorerを起動

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

とC#の代わりに、(2016年2月のように最良の推測)IEの設定を調整する:

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

これはSeleniumの問題追跡上issue 1795のすべての部分でした。

+1

C#版では、InternetExplorerDriverコンストラクタでDesiredCapabilitiesを渡すことができません –

関連する問題