我的所有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
。所以它与浏览器焦点有关,我想。
我试过了:
ElementNotVisibleException
或withWindow{}
,但唯一可用的窗口是主窗口。driver.switchTo().window()
但我收到withFrame()
NoSuchFrameException
但它会引发driver.switchTo().alert()
所以我想知道有人知道Chrome如何考虑NoAlertRaisedException
标签(提醒,确认,......)?
注意:根据caniuse.com,Chrome目前是唯一与
<dialog>
兼容的浏览器。
答案 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,它将成为所有浏览器的常用方法)。