Geb 断言 html table 行文本

Geb assert on an html table row text

我是 Geb 的新手,我正在编写一个测试来检查网页上的文本并断言该值是否存在。我感兴趣的文本是 table 行文本 这是我的 HTML table 行的 CSS / xpath 。

/html/body/table/tbody/tr[3]/td/table/tbody/tr[3]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/b/pre/a

body > table > tbody > tr:nth-child(3) > td > table > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td > table > tbody > tr:nth-child(2) > td > b > pre > a

我的需要是检查此行的值是否与特定文本匹配并断言它。

在 Geb 中最好的方法是什么。我尝试了多种选择,但没有得到明确的线索。

class HomePage extends Page
{
    static at ={ title== "Dispute Home Page"}

    static content = {
        displayMsg {$(By.xpath("/html/body/table/tbody/tr[3]/td/table/tbody/tr[3]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/b/pre/a"))}

        def message = displayMsg.text()
        assert (message == 'text pattern')
    }
}

提前致谢

看起来您在内容块中有您的断言。它应该在它自己的方法中。像这样:

class HomePage extends Page
{
    static at ={ title== "Dispute Home Page"}

    static content = {
        displayMsg {$(By.xpath("/html/body/table/tbody/tr[3]/td/table/tbody/tr[3]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/b/pre/a"))}
    }

    def textCompare(){
        def message = displayMsg.text()
        assert (message == 'text pattern')
    }

}

对于初学者,我强烈建议您利用 Geb's navigator api,它允许您从页面上获取几乎与 jquery 相同的内容。使用 xpath 难以阅读、难以维护且不是最佳实践。

在您的内容块中,如果您定义一个 table,其 ID 为:

myTable{ $("table#myTable")}

现在您可以执行以下操作:

myTable.children('td').find{it.text() == 'your text here' }

这当然可以扩展为按名称甚至索引查找特定行或 table 数据。我的 Github Repo 中有一些正确的页面对象和规范文件的示例,它们应该有助于您编写未来的测试。我希望这能给你足够的工作量。