使用Geb / Selenium与<dialog>进行交互(仅限Chrome)

时间:2017-06-30 14:41:46

标签: html5 google-chrome selenium spock geb

我的所有Geb / Spock测试都在Firefox上完美运行,然后我尝试使用Chrome(v59)并在发出警报或确认弹出窗口时继续挂起。

使用Firefox我使用my_list[skip_begin:-skip_end or None] withAlert{}来处理这些内容,但它不能与Chrome配合使用。

所以我做了一些挖掘视图,发现对话框由this widget管理。因此,我在页面对象中创建了withConfirm{}的访问者,但Chrome仍然无法与其进行交互(无法检测弹出窗口是否显示或关闭它)。 我试过了几件事,比如使用<dialog>或等待文本显示但没有任何效果。

我不习惯jQuery所以也许我在这里错过了什么?

以下是我必须与之互动的代码示例:

displayed

这就是我尝试访问它的方式(在我的页面对象中):

<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")}

有人可以帮忙吗?我想这可能与chrome&#39> 焦点有关(我的意思是如果它当前在弹出窗口或后面的页面上。

修改

毕竟,似乎问题与jQuery没有联系(我猜是好事)。由于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 中的open attribute,我们可以验证对话框是否已打开。我做过类似的事情:

<dialog>

但我仍然无法与对话框进行互动:当我尝试点击when: "Trying to upload ..." uploadFileButton = incorrect.absolutePath then: "A alerting pop up occurs" waitFor {alertPopUp.getAttribute("open") == "true"} 时,它会引发alertCloseButton。所以它与浏览器焦点有关,我想。 我试过了:

  • ElementNotVisibleExceptionwithWindow{},但唯一可用的窗口是主窗口。
  • driver.switchTo().window()但我收到withFrame()
  • NoSuchFrameException但它会引发driver.switchTo().alert()

所以我想知道有人知道Chrome如何考虑NoAlertRaisedException标签(提醒,确认,......)?

  

注意:根据caniuse.com,Chrome目前是唯一与<dialog>兼容的浏览器。

1 个答案:

答案 0 :(得分:0)

最后我设法找到了解决此问题的方法。我查看了google demo <dialog>使用情况,我使用了Geb提供的js object来执行Google的js示例。这最终给出了这个:

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,它将成为所有浏览器的常用方法)。