2017-06-30 3 views
0

すべてのGeb/SpockテストはFirefoxで完全に実行されていましたが、Chrome(v59)で試してみました。<dialog>とGeb/Selenium(Chromeのみ)

Firefoxの場合、私はwithAlert{}またはwithConfirm{}を使用していましたが、Chromeでは動作しません。

私はいくつかの意見を掘り下げて、そのダイアログがthis widgetによって管理されていることを知りました。だから私は<dialog>へのアクセサーを私のページオブジェクトに作成しましたが、Chromeはまだそれと対話できません(ポップアップが表示されているかどうかを検出したり、閉じることはできません)。 displayedを使用したり、テキストが表示されるのを待っていて何も処理されなかったりなど、いくつか試してみました。

jQueryに慣れていないので、ここで何か不足していますか?

<dialog class="qq-alert-dialog-selector"> 
    <div class="qq-dialog-message-selector"></div> 

    <div class="qq-dialog-buttons"> 
     <button type="button" class="qq-cancel-button-selector">Close</button> 
    </div> 
</dialog> 

そして、これは私が(私のページオブジェクトに)それにアクセスしようとする方法である:ここで

は私が対話しなければならないコードのサンプルです

alertPopUp {$("dialog", class:"qq-alert-dialog-selector")} 
alertCloseButton {alertPopUp.children("div.qq-dialog-buttons").children("button")} 

そして最後にどのように私はポップアップをテストしたいと思います:

when: "Trying to upload ..." 
uploadFileButton = incorrect.absolutePath 

then: "An alerting pop up occurs" 
waitFor{alertPopUp.displayed} 


when: "Closing the pop up" 
alertCloseButton.click(SubmitAClaim) 

then: "Number of uploaded files should not change" 
uploadedElements.size() == initialUploadedFiles 

誰でも助けることができますか?私はそれがポップアップ上または後ろのページに現在ある場合、それはクロムの焦点(私は意味とは何かを持っていることが推測

EDIT:。結局のところ

、それが問題と思われます。jQueryの(私は推測良いこと)にリンクされていない私たちは、ダイアログボックスが<dialog>open attributeにオープンおかげであることを確認することができ、私はこのような何かを行っている:。

when: "Trying to upload ..." 
uploadFileButton = incorrect.absolutePath 

then: "A alerting pop up occurs" 
waitFor {alertPopUp.getAttribute("open") == "true"} 

しかし、私はまだ、ダイアログボックスと対話することはできません。私がCにしようとするときalertCloseButtonにつけると、ElementNotVisibleExceptionが上がります。だから、ブラウザの焦点と関係していると思います。 私が試した:

  • withWindow{}またはdriver.switchTo().window()を利用できるが、唯一のウィンドウがメインの一つです。
  • withFrame()が、私はNoSuchFrameException
  • driver.switchTo().alert()を得るが、それはNoAlertRaisedException

を上げるだから私は(...、警報、確認)誰かがクローム<dialog>タグを検討する方法を知っていますかしら?

注:caniuse.comによると、Chromeは今の<dialog>と互換性が唯一のブラウザです。

+0

私は、 'waitFor {alertPopUp.getAttribute(" open ")!= null}'を使ってポップアップが表示されているかどうかをテストすることができましたが、実際には正しいことを主張するのかどうかはわかりません。私はまだダイアログボックスのボタンをクリックすることにつきます。 Seleniumは 'ElementNotVisibleException'を発生させ、私はすでにチェックしました。唯一のものは( 'alertCloseButton.size()== 1')です。誰かがアイデアを持っているのですか、それともChromeDriver 2.30の問題としてログに記録しますか? – Saub

答えて

0

最後に私はこの問題を処理する方法を見つけることができました。私はgoogle demo<dialog>で使用しました.Gebから提供されたjs objectを使ってjsの例をGoogleから実行しました。これは最終的にこれを与える:

when: "Trying to upload ..." 
uploadFileButton = incorrect.absolutePath 

then: "A alerting pop up occurs" 
waitFor {alertPopUp.getAttribute("open") == "true"} 


when: "Closing the pop up" 
report "After upload" 
js.exec """var dialog = document.querySelector(".qq-alert-dialog-selector"); 
    dialog.close(); 
    return true; 
""" 

then: "Number of uploaded files should not change" 
uploadedElements.size() == initialUploadedFiles 

これは本当に力ずくであり、それは、バックエンドに多くを依存しているように私には、ダイアログがなどが設定されているか、それを好きではない...しかし、それは動作します。私はGeb/Seleniumが使いやすいものを提供することを本当に願っています(<dialog>はW3Cなので、すべてのブラウザで普通になります)。

関連する問題