先来看下,用普通的方法如何进行webdrviver的测试
public class SimpleAmazonSearchTest {
private FirefoxDriver driver;
@Before
public void setupSelenium() {
driver = new FirefoxDriver();
}
@After
public void closeSelenium() {
driver.close();
driver.quit();
}
@Test public void
search_amazon() {
driver.get("http://www.amazon.co.uk/");
WebElement keywordsField = driver.findElement(By.name("field-keywords"));
keywordsField.sendKeys("iain banks");
WebElement goButton = driver.findElement(By.cssSelector("#navGoButton input"));
goButton.click();
WebElement topResultTitle = driver.findElement(By.cssSelector("#result_0 .title a"));
assertThat(topResultTitle.getText(), is("Stonemouth"));
}
很明显,上述代码中,测试代码和被测试代码之间耦合了。如果被测试的页面本身改变了的话,那么必须改变的代码很多,因此,可以抽象出被测试代码的“定义”部分,比如:
public class AmazonHomePage {
public static AmazonHomePage navigateTo(WebDriver driver);
public AmazonSearchResultsPage searchFor(String searchTerm);
}
上面的是要在主页中寻找代码的主类,测试的目的是输入搜索结果后,
最后的结果页面,也就是可以用AmazonSearchResultsPage这个类去封装
public class AmazonSearchResultsPage {
public String getTopResultTitle();
}
假设结果页面中,就只是获得页面的标题而已。
接下来是测试代码的框架:
AmazonHomePage homePage = AmazonHomePage.navigateTo(driver);
AmazonSearchResultsPage resultsPage =
homePage.searchFor("iain banks");
assertThat(resultsPage.getTopResultTitle(), is("Transition"));
可以看到,在测试代码中,没有了和XPATH等相关的,一切需要“寻找元素”之类的东西,这样,如果页面发生变化的话,改页面类本身就可以了,不需要更改测试代码
接下来,分别丰富两个类的代码,首先是在主页中,用注解的方式去寻找元素
public class AmazonHomePage {
private WebDriver driver;
@FindBy(name="field-keywords")
private WebElement keywordsField;
@FindBy(css="#navGoButton input")
private WebElement goButton;
public AmazonHomePage(WebDriver driver) {
this.driver = driver;
}
public AmazonSearchResultsPage searchFor(String searchTerm) {
keywordsField.sendKeys(searchTerm);
goButton.click();
return PageFactory.initElements(driver, AmazonSearchResultsPage.class);
}
public static AmazonHomePage navigateTo(WebDriver driver) {
driver.get("http://www.amazon.co.uk/");
return PageFactory.initElements(driver, AmazonHomePage.class);
}
public class AmazonSearchResultsPage {
private WebDriver driver;
@FindBy(css="#result_0 .title a")
private WebElement topResultTitle;
public AmazonSearchResultsPage(WebDriver driver) {
this.driver = driver;
}
public String getTopResultTitle() {
return topResultTitle.getText();
}
上面使用的就是selenium 2中的pageobject的设计模式了
分享到:
相关推荐
主要介绍了Python+Selenium使用Page Object实现页面自动化测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Selenium使用PageObject模式测试登陆页面,列出了一些测试用户,主要实现的登陆页面的自动测试
适合初级的测试开发 想要了解如何使用selenium和python编写ui自动化 并使用了Pageobject模式,和python测试框架 pytest 其中pageObject+pytest学习是用chatgpt4.0生成的。
通过从安装软件包,也可以在命令行中使用Selenium Page Object Generator。 该模板使用表达式,这是一种简洁的无逻辑语义模板语言。 这是BETA的早期版本,预计会具有粗糙的边缘和有限的功能。 目前,它支持3个...
selenium_example Python PageObject模式实现
PageObject简称PO,表示页面对象。 目的:主要实现代码的分层设计,减少代码的维护量,表现在页面元素和元素操作的相互分离。 主要核心元素: 基础类:用来封装基础类,比如驱动、元素的二次定位。 页面层:继承基础...
根据系统写的一个PageObject 框架,可以应用在其他系统,但是要写自己系统的page,仅供参考
基于 python 的 selenium UI 自动化测试框架,采用 Page Object 设计模式进行二次开发.zip 1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学...
python语言编写,selenium包,采用page object自动化框架,支持将结果回填到testlink,以及设置case tag,可控制每次跑哪些tag的case,并生成测试报告
Chapter 8: Using the Page Object Model Chapter 9: Extending Selenium Chapter 10: Testing HTML5 Web Applications Chapter 11: Behavior-Driven Development Chapter 12: Integration with Other Tools Chapter...
Build Page Object Classes using the Selenium Page Object Model Develop Data-Driven Test Classes using the TestNG framework Encapsulate Data using the JSON Protocol Build a Selenium Grid for ...
这是一个示例项目,目的是演示什么是页面对象模型框架以及如何在selenium中使用它来自动执行任何应用程序。 TestNG用作测试框架。 依赖Java Maven ###使用的库Selenium TestNG log4j范围报告 克隆步骤以执行测试 ...
Selenium WebDriver 入门知识、Selenium Python脚本、使用unittest 编写单元测试、生成HTML格式的测试报告、元素定位、...Page Object与数据驱动测试、Selenium WebDriver的特性、第三方工具与框架集成等核心技术...
Design effective automation frameworks using the PageObject pattern Learn how to deal with the latest features of WebDriver About the Author Satya Avasarala has rich experience in Java development...
Book Description Selenium WebDriver is an open source automation tool implemented ...The PageObject Pattern Mobile Testing on iOS and Android using Appium Data Driven Testing with TestNG Assessments
Selenium_With_PageObject_Models
PageObjectModel-Selenium
在我们学习selenium的po模式之前,我们先要了解什么是自动化测试,以及selenium中的八大定位的基本操作,那么接下来,您可以跟我一起走进po模式中的yaml管理数据 引言 yaml管理数据的好处: 数据清晰明了,操作简单...