我在geovy中使用geb进行测试自动化,处理以下场景:首先,我在父窗口,从那里打开新窗口并在那里进行一些搜索,点击搜索结果生成确认对话框并更新值父页面,使用withConfirm()绕过对话框。然后我来到父窗口,但之后没有任何执行。我认为geb在页面之间变得混乱。
In parent Page
open new window
search for something
click on the first search result
clicking on it opens a confirm dialog
click okay and close the new window
continue with parent window
我的代码如下:
withNewWindow(close: false,wait:true,{$(button that opens new window).click()}) {
waitFor{
title == "title"
}
withConfirm(wait: true){$(cause to open confirm dialog).click()}
}
$("input[name='button'][id='SAVE_FOOTER']").click()
}
错误:
Caught: org.openqa.selenium.NoSuchWindowException: Browsing context has been discarded
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'DESKTOP-NAFK3F3', ip: '10.1.10.195', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 65.0.2, javascriptEnabled: true, moz:accessibilityChecks: false, moz:geckodriverVersion: 0.24.0, moz:headless: false, moz:processID: 12824, moz:profile: C:\Users\Dell\AppData\Local..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 2c0c768c-785f-49d4-bdff-186566e722dd
org.openqa.selenium.NoSuchWindowException: Browsing context has been discarded
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'DESKTOP-NAFK3F3', ip: '10.1.10.195', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 65.0.2, javascriptEnabled: true, moz:accessibilityChecks: false, moz:geckodriverVersion: 0.24.0, moz:headless: false, moz:processID: 12824, moz:profile: C:\Users\Dell\AppData\Local..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 2c0c768c-785f-49d4-bdff-186566e722dd
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at geb.js.JavascriptInterface.execjs(JavascriptInterface.groovy:66)
at geb.js.JavascriptInterface.exec(JavascriptInterface.groovy:56)
at geb.js.DefaultAlertAndConfirmSupport.popLastDialogFunctionOnto(DefaultAlertAndConfirmSupport.groovy:114)
at geb.js.DefaultAlertAndConfirmSupport.captureDialog(DefaultAlertAndConfirmSupport.groovy:168)
at geb.js.DefaultAlertAndConfirmSupport.captureConfirm(DefaultAlertAndConfirmSupport.groovy:182)
at geb.js.DefaultAlertAndConfirmSupport.withConfirm(DefaultAlertAndConfirmSupport.groovy:54)
at geb.js.DefaultAlertAndConfirmSupport.withConfirm(DefaultAlertAndConfirmSupport.groovy)
at geb.js.AlertAndConfirmSupport$withConfirm.call(Unknown Source)
at geb.Page.withConfirm(Page.groovy:130)
at geb.Browser.methodMissing(Browser.groovy:249)
at geb.Browser.invokeMethod(Browser.groovy)
at CRMPageExample$_run_closure1$_closure3.doCall(CRMPageExample.groovy:149)
at CRMPageExample$_run_closure1$_closure3.doCall(CRMPageExample.groovy)
at geb.Browser.withNewWindow(Browser.groovy:798)
at CRMPageExample$_run_closure1.doCall(CRMPageExample.groovy:137)
at CRMPageExample$_run_closure1.doCall(CRMPageExample.groovy)
at geb.Browser.drive(Browser.groovy:128)
at geb.Browser$drive$0.callStatic(Unknown Source)
at geb.Browser.drive(Browser.groovy:98)
at geb.Browser$drive.call(Unknown Source)
at CRMPageExample.run(CRMPageExample.groovy:97)
1552494416789 Marionette INFO Stopped listening on port 52107
[Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 332
[Child 2628, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 332
[Child 2628, Chrome_ChildThread] WARNING: pipe error: 109: file [Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 332
[Child 8068, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 332
[Child 8068, Chrome_ChildThre
###!!! [Child][MessageChannel::SendAndWait] Error: Channel error: cannot send/recv
方法我试过但似乎没用
waitFor{
withwindow{Parent window}){true}
}
这在切换窗口时看起来像Geb警报处理中的一个重要问题。你能帮我一个忙吗?在the tracker发布这个问题,包括你提供的代码和堆栈跟踪?我会在几周后从假期回来看看。