9

我是一名尝试学习 GEB 和 Spock 的手动测试员。要学习这些,我是否必须具备 java 或 groovy 的先验知识?我一直在看GEB的书,有哪些先决条件、书籍或学习资源?请帮忙。谢谢。

4

1 回答 1

32

我尝试编译一些必需品和一些“必备品”,当我拿起 Geb 时,我发现它们很有帮助。

  1. 一些时髦的魔法。本手册涵盖了学习 Groovy 所需的大部分内容,但出于显而易见的原因,如果您沉迷于该语言,则可能需要考虑Groovy in Action。虽然学习 Groovy 不需要 Java,但如果您来自 Java(闭包除外)或什至具有 Python 背景,您可能可以浏览本教程 15 分钟,并且您已经了解了)。

  2. 一点硒。越多越好,但不要害怕,这一告诉你所有你需要知道的关于你通常会使用的 Selenium Webdriver 的信息。但要强调的是,越多越好。

  3. jQuery 选择器(每个人都说这很简单,但坦率地说,我每小时至少参考手册两次。我很笨,所以……)。如果您是 jQuery 新手,您可能希望从基本选择器开始,然后单击左侧导航菜单了解更多信息。请注意,并非所有 jQuery 选择器都适用于 Geb,但 Geb 教程的选择器部分并不是非常详尽且引人入胜。

  4. 在我的测试用例结束时,我需要生成一个跨越多个测试用例的奇特报告,并且我在测试用例之间存在依赖关系。所以,我选择了TestNG而不是 Spock。坦白说,我没有给Spock太多机会。

  5. PageObjects实际上不是 Geb 的先决条件,但 PageObjects 非常棒,以至于您永远不想在它之外考虑 Geb。PageObjects 是一个可爱的小模式,它表示您将 HTML 页面的结构包装到一个 Object 中,以便实际测试不必处理它。哈。得到你。让我用简单的英语说一下。

假设您有一个带有输入文本框的注册表单,其 id 为“nametext”。你将如何获得文本框的句柄?在 DOM 术语中,在 javascript 中,您只需执行

 document.getElementById("nametext")

在 Selenium 中,你会做非常相似的事情

 driver.findElement(By.id("nametext"))

所以,如果你想Jason在 Selenium 的文本框中填充,你会做一个

driver.findElement(By.id("nametext")).sendKeys("Jason"); 

如果您对所有输入字段都这样做,那么您的测试用例很快就会变得丑陋和可恶。取而代之的是,在 OO 术语中,您封装。您创建一个新类,说并将您的andRegistrationPage包装为:findElementsendKeys

public class RegistrationPage{

    …

    public RegistrationPage fillRegistrationForm(String name, String email){

        driver.findElement(By.id("nametext")).sendKeys(name); 
        driver.findElement(By.id("emailtext")).sendKeys(email); 

    }

}

从你的测试用例中,你会说

  RegistrationPage regPage=new RegistrationPage();
  regPage.fillRegistrationForm("Jason","jason@bourne.com");

(更好的想法是将您的输入值包装到一个类中并将其传递给 fillRegistrationForm)

事实上,Geb 以一种更好的方式利用 PageObjects - jQuery 选择器来拯救

class InputFormPage extends Page{

    …

    static content={
        name {$("input", id:"entry_0")}
        emailAddress {$("input", id:"entry_1")}
    }
 }

在你的测试用例中,你会说

 name.value ("Jason")
 emailAddress.value ("jason@bourne.com")
于 2013-01-10T01:54:10.577 回答