Right. This makes sense. It's because this is called from within a class
extending module which defines propertyMissing() that throws a
MissingPropertyException at the end if no matching property has been found.

I now see that using 'page:' option for withNewWindow() will only work as
expected if it's called from within a test class. I think the delegate of
the closure should be switched to the browser instance and the resolution
strategy should be set to DELEGATE_FIRST. I've created an issue for this:
https://github.com/geb/issues/issues/545. For the time being you will
unfortunately have to stick to the workaround you provided.

Marcin

On Thu, Nov 22, 2018 at 9:39 AM Yura Kalemi <[email protected]> wrote:

> Hi Marcin
> Thank you for your attention!
>
> But unfortunately it doesn't work too:
>
> return browser.withNewWindow({$('#newwindow').click()}, page: NewWindowPage) {
>     return txtElement
> }
>
>
> (I have just renamed divText to txtElement just for avoid naming
> collision with method name)
>
> Exception is:
>
> simpleWindowModule.getDivText() == 'text'
> |                  |
> |                  groovy.lang.MissingPropertyException: Unable to resolve
> txtElement as content for ModuledPage -> simpleWindowModule: SimpleModule,
> or as a property on its Navigator context. Is txtElement a class you forgot
> to import?
> ModuledPage -> simpleWindowModule: SimpleModule
>
>
> As you can see - geb doesn't search for txtElement in NewWindowPage.
>
> But if I change this code and take txtElement from current page - it will
> be okay (because NewWindowPage is really current page):
>
> String getDivText() {
>     return browser.withNewWindow({$('#newwindow').click()}, page: 
> NewWindowPage) {
>         def page = browser.getPage()
>         return page.txtElement
>     }
> }
>
>
>
>
> четверг, 22 ноября 2018 г., 2:12:47 UTC+5 пользователь Marcin Erdmann
> написал:
>>
>> 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
>>         }
>>     }
>> }
>>
> --
> 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/bd52bac3-5a29-4a1a-be9f-f880cdd50bbe%40googlegroups.com
> <https://groups.google.com/d/msgid/geb-user/bd52bac3-5a29-4a1a-be9f-f880cdd50bbe%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%2B52dQQg5NH%2BthXxu478Kvg4LTdzBMf1TztuEANXx9sxGmNTaw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to