自动化测试(三)PO模型

本文详细介绍了使用Selenium进行网页自动化操作的方法,包括如何创建页面元素的定位器,设计页面对象模型,以及如何通过单元测试框架执行自动化测试。示例展示了百度搜索页的自动化流程,从初始化浏览器到执行搜索操作,再到验证搜索结果页面的标题。

在页面元素不变的情况下,将页面中的所有元素全部提取出来,放入单独的模块中

百度搜索页元素

from selenium.webdriver.common.by import By
from pages.basePage import Page

#百度搜索page,继承基础的Page类
class SearchPage(Page):
    #搜索输入框
    search_input=(By.ID,'kw')
    #点击“百度一下”按钮
    search_button=(By.ID,'su')
    def __init__(self,driver,base_url="http://www.baidu.com"):
        Page.__init__(self,driver,base_url)

    def gotoBaiduHomePage(self):
        print(u"打开首页:",self.base_url)
        self.driver.get(self.base_url)

    def input_search_text(self,text="selenium3"):
        print(u"输入搜索关键字:selenium3")
        self.input_text(self.search_input,text)
        
    def click_search_btn(self):
        print("点击“百度一下”按钮")
        self.click(self.search_button)

用例调用该模块

import unittest
from selenium import webdriver
from pages.searchPage import SearchPage

class testSearchPage(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome(executable_path="c:\\chromedriver")

    def testSearch(self):
        driver = self.driver
        url = "http://www.baidu.com"
        text = "selenium"
        assert_title = u"百度一下,你就知道"
        search_Page = SearchPage(driver,url)
        search_Page.gotoBaiduHomePage()
        search_Page.input_search_text(text)
        search_Page.click_search_btn()
        self.assertEqual(search_Page.get_title(),assert_title)

    def tearDown(self):
        self.driver.quit()

但所有模块都有相同的地方就需要一个公共的模块,所有的页面模块都要继承这个基础模块

class Page(object):
    #初始化参数
    def __init__(self,driver,base_url="http://www.baidu.com"):
        self.driver=driver
        self.base_url=base_url
        self.timeout=10

    #重写元素定位方法
    def find_element(self,*loc):
        return self.driver.find_element(*loc)
    def input_text(self,loc,text):
        self.find_element(*loc).send_keys(text)
    def click(self,loc):
        self.find_element(*loc).click()
    def get_title(self):
        return self.driver.title

拆包

# 将未拆包的数据进行传参
# def run(a,*args):
#     #第一个参数传给了a
#     print(a)
#     # args是一个元组,里面是2和3两个参数
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)# *args 相当于 a,b = args
#
# run(1,2,3)

# 将未拆包的元组进行传参
# def run(*args):#args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(a)

# 将数字未拆包的元组进行传参
# def run(*args):#args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(0,a)

# 将已拆包的元组进行传参
# def run(*args):# args是一个元组 (1,2,3)
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(*a)

# 将已拆包的元组进行传参
# def run(*args):# args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(0,*a)

page文件目录下的basePage文件 

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class BasePage():
	def __init__(self,driver,logger):
		self.driver=driver
		self.logger=logger
		self.timeout=10

	def ele_is_presence(self,eletuple):
		try:
			ele=WebDriverWait(self.driver, self.timeout).until(EC.presence_of_element_located(eletuple))
			return ele
		except:
			self.logger.error('ele_is_presence:未找到元素 %s' %eletuple)

	def input_text(self,eletuple,text):
		try:
			self.ele_is_presence(eletuple).send_keys(text)
		except:
			self.logger.error('click:未找到元素 %s 或不能发送文本'%eletuple)

	def click(self,eletuple):
		try:
			self.ele_is_presence(eletuple).click()
		except:
			self.logger.error('click:未找到元素 %s 或不可点击'%eletuple)

	def open_url(self,url):
		self.driver.get(url)

 page文件目录下的loginPage文件 

from selenium.webdriver.common.by import By
from pages.basePage import BasePage

class LoinPage(BasePage):
	username=(By.NAME,'login_info')
	password=(By.NAME,'password')
	submit=(By.CLASS_NAME,'submit_login')

	# 输入用户名
	def input_username(self,name):
		self.input_text(self.username,name)

	# 输入密码
	def input_password(self,pwd):
		self.input_text(self.password,pwd)

	# 点击登录按钮
	def click_submit(self):
		self.click(self.submit)

  page文件目录下的mainPage文件 

from pages.basePage import BasePage
from selenium.webdriver.common.by import By

class MainPage(BasePage):

	login_btn=(By.LINK_TEXT,'登录')

	def enter_loginpage(self):
		self.click(self.login_btn)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值