2016-09-17 6 views
0

WebDriverのJavascript以外のバージョンの場合、このような質問がいくつかあります(つまり、Seleniumのalertに関する質問)。これらの質問についての回答では、推奨される一般的なパターンは次のとおりです。SeleniumのJavascript Webドライバでアラートを処理するにはどうすればよいですか?

try { 
    doSomethingWhichCausesAnAlert(); 
} catch(UnexpectedAlertOpenError e) { 
    doSomethingAboutException(e); 
} 

すべてが非同期であるため、しかし、私は、Javascriptのバージョンでそのパターンをコピーすることはできません。

try { 
    doSomethingWhichCausesAnAlert(); 
} catch(e) { 
    // this will never get reached 
} 
// 1ms or more later the alert appears, causing an exception 

私は多分考えました.catch

el.sendKeys('invalid keystrokes that cause an alert') 
    .catch((e) => doSomethingWithException(e)) 

を使用することもできますが、どちらも機能しません。 catchが解決した後でalert例外が発生したようです。私はalert例外をキャッチ(そして警告について何かを行う)ことができますどのように

TLDR

彼らはすべての私のコードのコンテキスト外に起こるように見えるとき?ところで

が、ここでは、アラート例外の例スタックトレースです:

UnexpectedAlertOpenError: unexpected alert open: {Alert text : Please enter a valid number ("not a number" is not a number).} 
    (Session info: chrome=53.0.2785.116) 
    (Driver info: chromedriver=2.23.409687 (c46e862757edc04c06b1bd88724d15a5807b84d1),platform=Linux 4.4.0-21-generic x86_64) 
    at WebDriverError (/home/me/project/node_modules/selenium-webdriver/lib/error.js:27:5) 
    at UnexpectedAlertOpenError (/home/me/project/node_modules/selenium-webdriver/lib/error.js:274:5) 
    at Object.checkLegacyResponse (/home/me/project/node_modules/selenium-webdriver/lib/error.js:512:13) 
    at parseHttpResponse (/home/me/project/node_modules/selenium-webdriver/lib/http.js:396:13) 
    at doSend.then.response (/home/me/project/node_modules/selenium-webdriver/lib/http.js:328:11) 
    at process._tickCallback (internal/process/next_tick.js:103:7) 
From: Task: WebDriver.manage().deleteAllCookies() 
    at Driver.schedule (/home/me/project/node_modules/selenium-webdriver/lib/webdriver.js:414:17) 
    at Options.deleteAllCookies (/home/me/project/node_modules/selenium-webdriver/lib/webdriver.js:1178:25) 
    at World.<anonymous> (/home/me/project/test/cucumber/features/support/Hooks.js:23:37) 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 

あなたが見ることができるように、でも関わっだ私のコードの一部のみがエラーになり、私のHooks.jsファイルです

this.driver.manage().deleteAllCookies(); 

this.After(テストは私がalertについて何かをするために手遅れに完了明らかAfter)でCookieをクリーンアップするために:それが呼び出そうとしました。

P.S. Afterがトリガーされる前にアラートが存在することを少なくとも確認するためのハッキーな方法が見つかりました。アラートが表示された後にthis.driver.manage().deleteAllCookies()というステップを呼び出すと、例外が発生します。ただし、A)私はちょうどalertを検出するためにクッキーを削除したくない、B)実際にはalertを閉じる方法がまだありません。

答えて

0

Stack Overflowの創設者が言っているように、私はちょうど "ソースLuke!これは、他のJS /セレンのユーザーを支援

// in a step or logic that goes off after the alert appears 

this.driver.switchTo().alert().then((alert) => alert.dismiss()); 

希望:私がやったとき、私は後方に働き、最終的にあるJSパターンを、把握することができました。

関連する問題