selenium-pageobject设计模式
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from pip._vendor.distlib.locators import Page
from selenium.webdriver.support.ui import Select#导入下拉框函数
import unittest
class Page(object):
login_url = 'http://qf-uatqapp-w2/ProductApplication/Application'
def __init__(self, selenium_driver, base_url=login_url):
self.base_url = base_url
self.driver = selenium_driver
self.timeout = 30
self.driver.maximize_window()
def on_page(self):
return self.driver.current_url == (self.base_url + self.url)
def _open(self, url):
url=self.base_url
self.driver.get(url)
self.driver.maximize_window()
#assert self.on_page(), 'Did not land on %s' %url
def open(self):
self._open(self.url)
def find_element(self, *loc):
return self.driver.find_element(*loc)
def switch_frame(self, loc):
return self.driver.switch_to_frame()
class LoginPage(Page):
url = '/'
username_loc = (By.ID, "Account")
password_loc = (By.ID, "Pwd")
submit_loc = (By.ID,"Log_Submit")
def type_username(self, username):
self.find_element(*self.username_loc).send_keys(username)
def type_password(self,password):
self.find_element(*self.password_loc).send_keys(password)
def submit(self):
self.find_element(*self.submit_loc).click()
class ProductPage(Page):
customername_loc = (By.ID, "customerName")
customerID_loc = (By.ID,"customerIDCard")
applyCity_loc = (By.ID,"applyCity")
# productCode_loc = (By.ID,"//option[@value='productCodesyd-6-24']")
# productCode_value = (By.XPATH,"//option[@value='BYQSF0000']")
# platform_loc = (By.ID,"platform")
#platform_value = (By.XPATH,"//option[@value='BYQSF0000']")
def type_customername(self, customername):
self.find_element(*self.customername_loc).send_keys(customername)
def type_customerID(self, customerId):
self.find_element(*self.customerID_loc).send_keys(customerId)
def type_applyCity(self, applyCityvalue):
Select(self.find_element(*self.applyCity_loc)).select_by_value(applyCityvalue)#下拉框函数
def test_user_login(driver, username, password):
page = LoginPage(driver)
page.open()
page.type_username(username)
page.type_password(password)
page.submit()
def test_apply_product(driver,customername, customerID, applyCityvalue):
page1 = ProductPage(driver)
page1.type_customername(customername)
page1.type_customerID(customerID)
page1.type_applyCity(applyCityvalue)
def main():
driver = webdriver.Chrome()
username = 'jiahua'
password = 'Quarkhj05'
customername = u'huajia'
customerId = '310104198408020057'
applyCityvalue = '025,025'
test_user_login(driver,username,password)
driver.implicitly_wait(30)
test_apply_product(driver,customername, customerId, applyCityvalue)
if __name__ == '__main__':
main()
unittest.main()
原文转自http://www.cnblogs.com/jerryhua/p/5794868.html
selenium-pageobject设计模式的更多相关文章
- PageObject设计模式,在selenium自动化测试中的运用
PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...
- selenium的PageObject设计模式
PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...
- PageObject设计模式 在selenium 自动化测试里面的应用
PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...
- 聊聊UI自动化的PageObject设计模式
当我们开发UI自动化测试用例时,需要引用页面中的元素(数据)才能够进行点击(动作)并显示出页面内容.如果我们开发的用例是直接对HTML元素进行操作,则这样的用例无法"应对"页面中U ...
- Page-Object设计模式
自动化脚本初写之际一定是只求完成功能测试,页面by.id.by.name.by.xpath满篇飞.业务逻辑代码重复率也是越来越高.慢慢的写着写着开始重构,开始封装一些方法.代码量好一些的人会在代码开始 ...
- 记我的第二次自动化尝试——selenium+pageobject+pagefactory实现自动化下单、退款、撤销回归测试
需求: 系统需要做下单.退款.撤销的回归测试,有下单页面,所以就想到用selenium做WEB UI 自动化 项目目录结构: common包上放通用的工具类方法和浏览器操作方法 pageobject包 ...
- Python+Selenium+PageObject
一.安装page_objects测试库 二.目录介绍 1.pages包:用于各界面元素定位,如BaseLoginPage.py 2.testcases包:用于编写各功能测试用例,如Login.py 3 ...
- selenium +python之Page Obiect设计模式
PageObject是selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现对界面交互细节的封装,这样可以使测试案例更关注于业务而非界面细节,从而提高测试案例的可读性. 1.认识Page ...
- selenium自动化测试框架之PO设计模式
面向对象的特性:封装.继承.多态.在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率. 传 ...
- [小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建
本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读 ...
随机推荐
- 有关emoji表情以及utf-16编码
昨日IOS组的同事遇到一个棘手的问题:当输入框内含有emoji表情时,如何获取文本框内的字符数(一个emoji表情算一个字符). 先从我最近接触的JAVA说起,JAVA中,在使用S ...
- 15.6.6 Configuring Thread Concurrency for InnoDB
innodb_thread_concurrency 设置inndb线程个数,如果超过则休眠一段时间,时间根据 innodb_thread_sleep_delay 单位为微妙,然后放进队列. innod ...
- .NET Core Web 应用部署到 Docker 中运行
环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...
- Head First Html and CSS学习笔记之CSS
第七章 CSS入门 元素的许多属性都可以设置样式,太多了,记不住,可以参考<CSS Pocket Reference>. 外部样式表,<link type = "text/ ...
- 线性代数和numpy——黑板客老师课程学习
一.代数是什么 代数->数的抽象表示->向量空间(线性空间) 线代->线性代数 关系: 向量空间之间和内部转换是通过线性变换. 实数——一维空间的点 复数——二维空间的点 如果两个向 ...
- LoadRunner ---参数化数据源(oracle,mssql,excel)
TXT文本,EXCEL表格以及数据库中的表都可以作为参数的数据集载体,LR都是支持的. 特别提醒:1.在形成数据池之后,数据库中的数据变化不会影响数据池中的数据.2.数据文件一定要以一个空行结束,否则 ...
- 循序渐进Python3(八) -- 1 -- socket进阶
IO多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. Linux中的 select,poll,epoll 都 ...
- spring mvc 第三天【注解实现springmvc Handler返回值为Object 的配置】
这里使用的是在前台发起请求Handler,后台伪造数据响应给前台, 解决方案:将之前的viewResolver抹掉,配置对应(request)请求的Handler信息如下 之前Handler返回的都直 ...
- 今天研究一下SVN的分支和合并
关键字: trunk, branch, tag, merge 以前一直以为很难,没敢接触.今天晚上看了一下,也不过如此 用起来还是很简单的
- <![CDATA[ ]]> 的作用
在xml文件中 一些特殊字符需要去除其本意,就要用到 <![CDATA[ ]]>,,比如 ibitis的sqlmap.xml 中 要比较大小不能直接用 < 或者 > , ...