Selenium关于Page Objects
介绍页面对象设计模式。一个页面对象表示在你测试的web页面用户交互的界面。
使用页面对象模式的有点:
- 创建可重用的代码可以在多个测试用例中使用
- 减少重复的代码量
- 如果用户界面改变,只需要修改一个地方
1.Test case
下面的测试用例是在百度中搜索关键字,并返回相应的结果
import unittest
from selenium import webdriver
import page class BaiduSearch(unittest.TestCase): def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://www.baidu.com") def test_search_in_baidu(self):
main_page = page.MainPage(self.driver)
#断言标题关键字
assert main_page.is_title_matches(), "baidu title doesn't match."
#设置搜索的关键字
main_page.search_text_element = "selenium"
main_page.click_go_button()
search_results_page = page.SearchResultsPage(self.driver)
#断言结果页面不是空的
assert search_results_page.is_result_found(), "No result found." def tearDown(self):
self.driver.close() if __name__ == "__main__":
unittest.main()
2.Page object classes
页面对象模式将为每个web页面创建一个对象。按照这种方式分层测试代码和实现。
新建page.py,代码如下:
from element import BasePageElement
from locators import MainPageLocators class SearchTextElement(BasePageElement):
locator = 'kw' class BasePage(object):
"""被所有页面调用的页面初始化的基础类""" def __int__(self, driver):
self.driver = driver class MainPage(BasePage):
"""主页面的方法""" search_text_element = searchTextElement() def is_title_match(self):
return "selenium" in self.driver.title def click_go_button(self):
elemnt = self.driver.find_element(*MainPageLocators.GO_BUTTON)
element.click() class SearchsultsPage(BasePage):
"""搜索结果页面的方法""" def is_results_found(self):
return "No results found." not in self.driver.page_source
3.Page elements
新建element.py 代码如下:
from selenium.webdriver.support.ui import WebDriverWait class BasePageElement(object):
def __set__(self, obj, vaule):
driver = obj.driver
WebDriverWait(driver, 100).until(
lambda driver: driver.find_element_by_name(self.locator))
driver.find_element_by_name(self.locator).send_keys(value) def __get__(self, obj, owner):
driver = obj.driver
WebDriverWait(driver, 100).until(
lambda driver: driver.find_element_by_name(self.locator))
element = driver.find_element_by_name(self.locator)
return element.get_attribute("value")
4.Locators
将定位到的元素分离,同一个页面的定位的元素属于同一个类
新建locators.py 代码如下:
from selenium.webdriver.common.by import By class MainPageLocators(object):
"""所有主页面定位到的元素"""
GO_BUTTON = (By.ID, 'su') class SearchResultsPageLoactors(object):
"""所有搜索结果定位的元素"""
pass
Selenium关于Page Objects的更多相关文章
- Selenium - WebDriver: Page Objects
This chapter is a tutorial introduction to page objects design pattern. A page object represents an ...
- 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化
Page Objects 设计模式 简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位.业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试 ...
- selenium+Page Objects(第三话)
写好BasePage基类和页面元素定位后,就可以针对每个页面写业务逻辑了 1.编写每个页面page类,拿其中一个页面为例 fourth_page.py(名字我随便取的,实际中希望能取一些有意义的名字) ...
- selenium+Page Objects(第一话)
简单介绍一种selenium用来做web自动化测试的设计模式:Page Objects 一.Page Objects介绍 用官话说它是selenium中的一种页面对象设计模式(不是测试框架!是一种开展 ...
- 浅析selenium的page object模式
selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...
- 移动UI自动化-Page Objects Pattern
移动UI自动化,看起来美好,践行起来却难.做个目光短见的务实主义者.Page Objects Pattern是Selenium官方推崇的方式,最近研究写测试用例最佳实践之Page Objects,同时 ...
- [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式
写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...
- Page Objects
Page Objects 原文地址:https://github.com/SeleniumHQ/selenium/wiki/PageObjects Within your web app's UI t ...
- [Protractor] Testing With Protractor Page Objects
Protractor Page Objects are a recommended for testing your AngularJS applications. Page Objects abst ...
随机推荐
- space 管理
输入:表空间名字 输出:表空间下的一个文件即退出 /tmp/.sql select name from v$database; set serveroutput on; declare i1 varc ...
- s-palindrome
s-palindrome Let's call a string "s-palindrome" if it is symmetric about the middle of the ...
- Android开发之InstanceState详解(转)---利用其保存Activity状态
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- vc6 pbo 文件为空的解决方法
使用Profile调试vc6应用程序的性能时,将生成pbo文件,今天在vc IDE中增加了命令行启动参数,导致profile无法生成pbo文件,进而无法生成性能报告. 解决方法: 去掉IDE中的命令行 ...
- iOS完美版的UIScrollView无缝循环:你值得一看
可以直接copy运行研究 .m头文件和声明的常量(宏和const) #import "ViewController.h" // UIScrollView的尺寸 const CGFl ...
- JSTL c标签,fn标签,fmt标签 - 生活在爪洼岛上 - ITeye技术网站
jstl是sun定义的标准,由apache实现,所以要下载jar包的话去apache,要看api文档的话,去sun,API文档在此:http://java.sun.com/products/jsp/j ...
- CodeForces 618C CodeForces 618C
第一反应是在凸包上随便找一条边,然后找剩下n-2个点里面距离这条边最短的一个点,这三点就构成了符合要求的三角形..然而..精度被卡死. 换种思路,随便找两个点P1,P2,找剩下n-2个点中哪一个点与P ...
- mysql--学生课程成绩表
创建表student: CREATE TABLE `student` ( `sid` INT(11) NOT NULL AUTO_INCREMENT, `sname` VARCHAR(20) NOT ...
- Mac上ssh无法登录的问题
今天起来发现阿里云ssh无法登录了 出现一条警告: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 开始打算清理know_hosts发现失败,清了根本 ...
- css01
1. 常用属性:①color:文本颜色:②background-color:背景颜色:③font-size:文字大小: 2. 样式声明:①内部样式:style=“样式规则:”,写于作用标签内, ...