Selenium 发出警报后,使用geb关闭弹出窗口

Selenium 发出警报后,使用geb关闭弹出窗口,selenium,testing,webdriver,geb,Selenium,Testing,Webdriver,Geb,我尝试使用Geb测试框架实现以下目标: 我打开了一个弹出窗口 我点击一个按钮 发出警报 单击“确定”后,弹出窗口关闭。(这是我真正的问题) 我使用的代码会引发WindowNotFoundException: // open the popup by clicking the link (javascript) withNewWindow({ selectLink.click() }) { // doing some other stuff in the opened window

我尝试使用Geb测试框架实现以下目标:

  • 我打开了一个弹出窗口
  • 我点击一个按钮
  • 发出警报
  • 单击“确定”后,弹出窗口关闭。(这是我真正的问题)
  • 我使用的代码会引发WindowNotFoundException:

    // open the popup by clicking the link (javascript)
    withNewWindow({ selectLink.click() }) {
        // doing some other stuff in the opened window
    
        // closing the window by clicking a button
        // Javascript will close the window after the alert is closed
        withAlert {                    // <- The error is raised here
            $(".select").click()
        }
    }
    
    //单击链接打开弹出窗口(javascript)
    withNewWindow({selectLink.click()}){
    //在打开的窗口里做其他事情
    //通过单击按钮关闭窗口
    //Javascript将在警报关闭后关闭窗口
    
    用alert{/如果我读对了,你点击alert上的OK,你就会得到错误

    听起来Geb不知道它在哪个页面上,您需要用waitFor来包装代码:

    waitFor {
            withWindow({ isAt MyPage}) { true }
        }
    

    默认情况下,Geb在该方法执行结束时通过
    withNewWindow()
    调用关闭打开的窗口。您可以使用以下命令要求它不要这样做:


    嘿,埃尔迪。谢谢你的回复。我已经试过了,但我在withAlert行仍然收到相同的错误。嘿,拉什比。谢谢你的回复。我想这就是问题所在:Geb不知道它在哪一页上。你能澄清我应该包装代码的哪一部分吗?你是在检查父窗口还是弹出窗口?我试过包装它他对NewWindow很感兴趣,但我想你的意思可能是别的……我还在寻找解决办法……有人有主意吗?
    waitFor {
            withWindow({ isAt MyPage}) { true }
        }
    
    withNewWindow({ selectLink.click() }, close: false) {
        ...
    }