Hi Yura, Yes, I'm afraid that you are indeed misusing Geb modules in this case.
The issue you are seeing is because calls to $() from within a module resolve the passed selectors relative to the base of the module ( http://gebish.org/manual/current/#base-and-context). In your case the base of the module is located within the original window and then you are trying to resolve a selector relative to it from within the new window. The web element which is backing your module base does not exist in the new window hence the error you are getting mentions an element has not been seen before (that element is the module base which is in the original window). The way to solve it is to model content of the newly opened window with a page class (see http://gebish.org/manual/current/#code-page-code-2) and use it from your module: class NewWindowPage extends Page { static content = { divText { $('div', id: 'divel').text() } } } class SimpleModule extends Module { String getDivText() { return browser.withNewWindow({$('#newwindow').click() }, page: NewWindowPage) { return divText } } } On Wed, Nov 21, 2018 at 7:24 AM Yura Kalemi <[email protected]> wrote: > I have some issue with Module - $ function dosn't work if I use > browser.withNewWindow method. > There is little test case. > > 1. Tested geb.html. It has one button, wich opens another window > <html><head> > <meta http-equiv="content-type" content="text/html; charset=UTF-8"> > <title>Window Open Test</title> > > <script type="text/javascript"> > > function open_blank() > { > var w = window.open("about:blank", "_blank", > "width=800,height=500,status=0,toolbar=0"); > w.document.write("<html><head></head><title>New Window</title><body><div > id='divel'>div text</body></html>"); > w.document.close(); > w.focus(); > } > > > </script> > > </head> > <body> > <button id="newwindow" onclick="open_blank()"> > window open blank > </button> > </body></html> > > 2. SimplePage - doesn't use any Module > > class SimplePage extends Page { > static url = 'file:///home/ykalemi/geb.html' > > static at = { title == "Window Open Test" } > > String getDivText() { > return browser.withNewWindow( {$('#newwindow').click()} ) { > return $('div', id: 'divel').text() > } > } > } > > > 3. ModuledPage - has two kind of modules > > class ModuledPage extends Page { > static url = 'http://localhost/geb.html' > static at = { title == "Window Open Test" } > > static content = { > simpleWindowModule {module SimpleModule} > > smartWindowModule {module SmartModule} > } > } > > > 4. SimpleModule - module with $-function. > > class SimpleModule extends Module { > > String getDivText() { > return browser.withNewWindow( {$('#newwindow').click()} ) { > return $('div', id: 'divel').text() > } > } > } > > > 5. SmartModule - module with workaround > > class SmartModule extends Module { > > String getDivText() { > return browser.withNewWindow( {$('#newwindow').click()} ) { > return browser.navigator.find('div', id: 'divel').text() > } > } > } > > > 6. And ModuleSpec > > class ModuleSpec extends GebReportingSpec { > > > // pass > def 'PageInteraction'() { > when: > to SimplePage > then: > getDivText() == 'text' > } > > // fails with NoSuchElementException: Web element reference not seen > before: 4d4c610f-1366-4bc1-ad34-15f6326e336d > def 'SimpleModuleInteraction'() { > when: > to ModuledPage > then: > simpleWindowModule.getDivText() == 'text' > } > > // pass > def 'SmartModuleInteraction'() { > when: > to ModuledPage > then: > smartWindowModule.getDivText() == 'text' > } > } > > > > Looks like navigator inside Module cannot survive after page reloading / > new window opening. > Is it a bug? Or am I misuse Module in this case? > > Geb: 2.2 > Spock: 1.1 > Selenium: 3.14.0 > > -- > You received this message because you are subscribed to the Google Groups > "Geb User Mailing List" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/geb-user/4e08e721-e895-4a4d-b2a3-73fe22e29c07%40googlegroups.com > <https://groups.google.com/d/msgid/geb-user/4e08e721-e895-4a4d-b2a3-73fe22e29c07%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Geb User Mailing List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/geb-user/CA%2B52dQT0M5qEH6YMW1W16yg9MpDtEtP-daUgkXYNvwOfqV6p7A%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
