【问题标题】:Dynamically setting content in Geb在 Geb 中动态设置内容
【发布时间】:2014-08-25 21:26:57
【问题描述】:

我想在一个 groovy 类中定义一个方法,我可以动态地将 xpath 传递给它(以便根据应用程序重复使用相同的方法)。下面的代码 sn-p 只是一个概念证明,但是我最终想构建一个可重用的命令/组件库,这就是为什么我想学习如何动态定义页面内容的原因。

如果我试试这个:

import geb.Page;


class oneStepDefMethodClass extends Page {
static url = 'http://www.google.com'
static content = {
    queryInput { $("input", id: "gbqfq") }   
    queryButton { $("button",name: "btnG") } 
    //songLink { $("span._BZ")} 
}
....
void assertSongInResults2(String xpathOfSongLink){
    println "Waiting on video link "+ xpathOfSongLink

     songLink { $(xpathOfSongLink)}

    waitFor {
        songLink.displayed
    }
}

}

我收到此错误:groovy.lang.MissingMethodException:没有方法签名:geb.navigator.NonEmptyNavigator.songLink() 适用于参数类型:(oneStepDefMethodClass$_assertSongInResults2_closure3) 值:[oneStepDefMethodClass$_assertSongInResults2_closure3@7c455e96]

如果我扔了一个

content={songLink {$(xpathOfSongLink)}
}

块在 assertSongInResults2 方法中,我得到这个错误: geb.error.UnresolvablePropertyException:无法将 songLink 解析为 oneStepDefMethodClass 的内容,或其导航器上下文的属性。 songLink 是您忘记导入的类吗?

那么,有没有办法像这样动态定义页面内容?如果我将其与其余内容一起静态定义在顶部,则程序可以正常执行,但这不是重点,我想创建可重用的资源,而不是每次我想使用 geb 时都重新定义轮子。

【问题讨论】:

    标签: xpath groovy geb


    【解决方案1】:

    在我写这个问题时解决了,但我想我会发布以防其他人有类似的问题

    static String someXpath
    
    static content = {
        queryInput { $("input", id: "gbqfq") } //  
        queryButton { $("button",name: "btnG") } //
        songLink { $(someXpath) } //syntax element.className
    
    }
    ....
        void assertSongInResults2(String xpathOfSongLink){
        println "Waiting on video link "+ xpathOfSongLink
        someXpath=xpathOfSongLink
        waitFor {
            songLink.displayed
        }
    }
    

    【讨论】:

    • 感谢分享答案! 48 小时后,您甚至可以accept your own answer 以防止问题出现在“未回答”标签中。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2019-08-29
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多