我是一名尝试学习 GEB 和 Spock 的手动测试员。要学习这些,我是否必须具备 java 或 groovy 的先验知识?我一直在看GEB的书,有哪些先决条件、书籍或学习资源?请帮忙。谢谢。
1 回答
我尝试编译一些必需品和一些“必备品”,当我拿起 Geb 时,我发现它们很有帮助。
一些时髦的魔法。本手册涵盖了学习 Groovy 所需的大部分内容,但出于显而易见的原因,如果您沉迷于该语言,则可能需要考虑Groovy in Action。虽然学习 Groovy 不需要 Java,但如果您来自 Java(闭包除外)或什至具有 Python 背景,您可能可以浏览本教程 15 分钟,并且您已经了解了)。
一点硒。越多越好,但不要害怕,这一页告诉你所有你需要知道的关于你通常会使用的 Selenium Webdriver 的信息。但要强调的是,越多越好。
jQuery 选择器(每个人都说这很简单,但坦率地说,我每小时至少参考手册两次。我很笨,所以……)。如果您是 jQuery 新手,您可能希望从基本选择器开始,然后单击左侧导航菜单了解更多信息。请注意,并非所有 jQuery 选择器都适用于 Geb,但 Geb 教程的选择器部分并不是非常详尽且引人入胜。
在我的测试用例结束时,我需要生成一个跨越多个测试用例的奇特报告,并且我在测试用例之间存在依赖关系。所以,我选择了TestNG而不是 Spock。坦白说,我没有给Spock太多机会。
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
包装为:findElement
sendKeys
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")