Ruby Selenium Webdriver + 页面对象模型 + 实践网站?
Ruby Selenium Webdriver + Page object model + Practice Website?
我一直在使用带有 java + TestNG 框架的 Selenium 网络驱动程序,但是,我找到了一份工作,但他们使用 ruby + selenium 网络驱动程序和页面对象模型。在开始之前,我搜索了 google 并收集了一些资源来通读,但是我想练习一下。根据我的理解,我可能是完全错误的,但是对于页面对象模型,您在单独的 class 中创建对象,它与实际对象具有相同的 属性,然后您使用不同的 class 用测试代码来测试这些对象?
我想从头开始练习和学习 有人知道 ruby 使用 selenium 的一些具体教程吗?我在 java 中使用 http://toolsqa.com/ 进行学习,这非常好,但在 ruby 中会很棒吗?
还有最后一个问题!我在本地环境的工作环境中进行测试,什么是好的 public 网站,它具有注册、登录等我可以练习编写测试的内容?
谢谢
与其专注于特定框架,听起来您需要更多关于测试中的页面对象模型模式背后理论的信息。
高级概述
为网站编写自动化 UI 测试的问题之一是 UI 逻辑和测试逻辑之间没有明确的 separation of concerns。页面对象模型模式旨在通过将您的测试分离到自己的测试 classes 中来解决这个问题,这些测试只包含测试逻辑(例如断言、应用程序流)。页面对象 classes 包含与页面的交互(例如单击按钮和在页面上填写表单)。
页面对象 - 更详细
这些 class 是 'page' 的表示形式,它不仅是标准网页,还可以表示页面的一部分或模态对话框。
它们只包含如何在页面上做事,例如:
- 点击按钮
- 填写表格
- 从页面获取元素。
通常它们被写成 Fluent Interface
想象一个带有主页和联系人目录的应用程序来搜索联系人。这将是两个页面对象。主页页面对象和 ContactsDirectoryPageObject。每个对象处理如何与页面交互以执行操作和获取数据。所以一些 puesdocode 可能看起来像:
# The Homepage Page Object
class HomepageObject {
ClickContactsDirectoryPageButton()
{
webdriver.click(By.Id("contactsDirectoryButton"));
}
GetContactsDirectoryPageObject()
{
return new ContactsDirectoryPageObject()
}
}
# The Contacts Directory Page Object
class ContactsDirectoryPageObject {
SearchForContact(contactName)
{
webdriver.findElementById("searchBox").Click().SendKeys(contactName)
webdriver.findElementById("search").Click()
}
GetFoundContactInformation()
{
resultElement = webdriver.findElementById("result")
# Some logic to convert element into a model to pass back
result = new ContactResultModel(resultElement);
return result;
}
}
在测试中使用页面对象
所以在测试中使用时 class 它们可能看起来像 (puesdocode):
class MyTest {
daveContact = homepage.ClickContactsDirectoryPageButton()
.GetContactsDirectoryPage()
.SearchForContact("Dave")
.GetFoundContactInformation()
Assert.That(daveContact.Name).Equals("Dave")
}
现在测试只做一项工作——断言被测功能有效。通过处理应用程序并对来自它的数据进行断言。测试不知道页面是如何构造出来的。
为什么要麻烦(优势)?
- 如果您的测试同时包含测试逻辑和页面对象模型逻辑,那么每次按钮或文本框的 ID 更改时您都必须更新所有测试。
- 测试变得更容易阅读,因为它们只专注于映射应用程序的流程并断言它是正确的。
- 当应用程序发生变化时更新您的测试更容易,因为您只有一个地方可以更新它 - 您的页面对象。
我一直在使用带有 java + TestNG 框架的 Selenium 网络驱动程序,但是,我找到了一份工作,但他们使用 ruby + selenium 网络驱动程序和页面对象模型。在开始之前,我搜索了 google 并收集了一些资源来通读,但是我想练习一下。根据我的理解,我可能是完全错误的,但是对于页面对象模型,您在单独的 class 中创建对象,它与实际对象具有相同的 属性,然后您使用不同的 class 用测试代码来测试这些对象?
我想从头开始练习和学习 有人知道 ruby 使用 selenium 的一些具体教程吗?我在 java 中使用 http://toolsqa.com/ 进行学习,这非常好,但在 ruby 中会很棒吗?
还有最后一个问题!我在本地环境的工作环境中进行测试,什么是好的 public 网站,它具有注册、登录等我可以练习编写测试的内容?
谢谢
与其专注于特定框架,听起来您需要更多关于测试中的页面对象模型模式背后理论的信息。
高级概述
为网站编写自动化 UI 测试的问题之一是 UI 逻辑和测试逻辑之间没有明确的 separation of concerns。页面对象模型模式旨在通过将您的测试分离到自己的测试 classes 中来解决这个问题,这些测试只包含测试逻辑(例如断言、应用程序流)。页面对象 classes 包含与页面的交互(例如单击按钮和在页面上填写表单)。
页面对象 - 更详细
这些 class 是 'page' 的表示形式,它不仅是标准网页,还可以表示页面的一部分或模态对话框。
它们只包含如何在页面上做事,例如:
- 点击按钮
- 填写表格
- 从页面获取元素。
通常它们被写成 Fluent Interface
想象一个带有主页和联系人目录的应用程序来搜索联系人。这将是两个页面对象。主页页面对象和 ContactsDirectoryPageObject。每个对象处理如何与页面交互以执行操作和获取数据。所以一些 puesdocode 可能看起来像:
# The Homepage Page Object
class HomepageObject {
ClickContactsDirectoryPageButton()
{
webdriver.click(By.Id("contactsDirectoryButton"));
}
GetContactsDirectoryPageObject()
{
return new ContactsDirectoryPageObject()
}
}
# The Contacts Directory Page Object
class ContactsDirectoryPageObject {
SearchForContact(contactName)
{
webdriver.findElementById("searchBox").Click().SendKeys(contactName)
webdriver.findElementById("search").Click()
}
GetFoundContactInformation()
{
resultElement = webdriver.findElementById("result")
# Some logic to convert element into a model to pass back
result = new ContactResultModel(resultElement);
return result;
}
}
在测试中使用页面对象
所以在测试中使用时 class 它们可能看起来像 (puesdocode):
class MyTest {
daveContact = homepage.ClickContactsDirectoryPageButton()
.GetContactsDirectoryPage()
.SearchForContact("Dave")
.GetFoundContactInformation()
Assert.That(daveContact.Name).Equals("Dave")
}
现在测试只做一项工作——断言被测功能有效。通过处理应用程序并对来自它的数据进行断言。测试不知道页面是如何构造出来的。
为什么要麻烦(优势)?
- 如果您的测试同时包含测试逻辑和页面对象模型逻辑,那么每次按钮或文本框的 ID 更改时您都必须更新所有测试。
- 测试变得更容易阅读,因为它们只专注于映射应用程序的流程并断言它是正确的。
- 当应用程序发生变化时更新您的测试更容易,因为您只有一个地方可以更新它 - 您的页面对象。