python selenium page object_selenium+Python(Page Object 设计模式实例)

以下实例演示了采用了page Object设计模式的方式登录qq空间:

1、创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(timeout)等

2、创建LoginPage类:Page类中定义的方法是页面操作的基本方法,后面根据登录页面特点创建LoaginPage类并继承Page,这就是page Object设计模式中的对象层

3、创建test_user_login()函数:创建test_user_login()函数将单个元素操作组成一个完整动作,这个动作包含打开浏览器、输入账号密码、登录等操作

4、创建main()函数:main()函数更接近用户操作行为,用户操作只需要关系是那个浏览器打开打开网址,登录的用户名和密码是什么,不会关系是如何去定位输入框的

代码:

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.by import By

from time import sleep

class Page(object):

"""基础类,用于所以页面对象类继承"""

login_url = 'https://i.qq.com'

def __init__(self, selenium_driver, base_url=login_url):

self.base_url = base_url

self.driver = selenium_driver

self.timeout = 30

def on_page(self):

return self.driver.current_url == (self.base_url + self.url)

def _open(self,url):

url = self.base_url+url

self.driver.get(url)

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)

class LoginPage(Page):

"""登录页面模型"""

url = '/'

# 定位器

username_loc = (By.ID, 'u')

password_loc = (By.ID, 'p')

submit_loc = (By.ID, 'login_button')

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 type_submit(self):

self.find_element(*self.submit_loc).click()

def test_user_login(driver, username, password):

"""测试获取的用户名、密码是否可以登录成功"""

login_page = LoginPage(driver)

login_page.open()

driver.maximize_window()

driver.switch_to_frame('login_frame')

driver.find_element_by_id("switcher_plogin").click()

login_page.type_username(username)

login_page.type_password(password)

login_page.type_submit()

def main():

try:

driver = webdriver.Firefox()

username = 'qq号' #调试的时候需要换成对应的QQ号

password = 'qq密码' #需要换成对应的密码

test_user_login(driver, username, password)

sleep(3)

# 断言的方式判断登录是否成功

try:

assert '对应空间的title' in driver.title #调试时候title要换

print ('successful')

except Exception as e :

print ('failed')

finally:

driver.close()

if __name__ == '__main__':

main()

这样的分层好处是,不同的层关心不同的问题,页面对象只关心元素的定位问题,测试用例只关心测试数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值