Page Object设计模式实践

内容预览:
  •   Page Object模式是使用Selenium的广大同行最为公认的一种设计模式~
  • 在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后...~
  •   Page Object模式,创建一个对象来对应页面的一个应用~

  Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。

  Page Object模式,创建一个对象来对应页面的一个应用。故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型。体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。减少代码重复,提高测试代码的可读性和可维护性。

  下面将以登录qq邮箱为例,通过Page Object设计模式来实现。代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

#创建基础类
class BasePage(object):
#初始化
def __init__(self, driver):
self.base_url
= 'https://mail.qq.com/'
self.driver
= driver
self.timeout
= 30

#打开页面
def _open(self):
url
= self.base_url
self.driver.get(url)
self.driver.switch_to.frame(
'login_frame') #切换到登录窗口的iframe

def open(self):
self._open()

#定位方法封装
def find_element(self,*loc):
return self.driver.find_element(*loc)

#创建LoginPage类
class LoginPage(BasePage):
username_loc
= (By.ID, "u")
password_loc
= (By.ID, "p")
login_loc
= (By.ID, "login_button")

#输入用户名
def type_username(self,username):
self.find_element(
*self.username_loc).clear()
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_login(self):
self.find_element(
*self.login_loc).click()

#创建test_user_login()函数
def test_user_login(driver, username, password):
"""测试用户名/密码是否可以登录"""
login_page
= LoginPage(driver)
login_page.open()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_login()

#创建main()函数
def main():
driver
= webdriver.Edge()
username
= '3494xxxxx' #qq号码
password = 'kemixxxx' #qq密码
test_user_login(driver, username, password)
sleep(
3)

driver.quit()

if __name__ == '__main__':
main()

  虽然该实现方法看上去复杂多了,但其中的设计好处是不同层关心不同的问题。页面对象只关心元素的定位,测试用例只关心测试数据。

以上就是:Page Object设计模式实践 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论