2026/2/7 5:31:49
网站建设
项目流程
做贺卡的网站,重庆品牌策划公司排名,建网站算法,网站建设指南 菜鸟教程PO模式#xff1a;Page Object#xff0c;是一种页面对象设计模式#xff0c;算是一种比较好的设计模式。在该设计模式中#xff0c;功能类#xff08;PageObjects#xff09;所代表的是每个页面之间的逻辑关系。PO设计模式一、PO设计模式的优点PO模式有以下优点#xf…PO模式Page Object是一种页面对象设计模式算是一种比较好的设计模式。在该设计模式中功能类PageObjects所代表的是每个页面之间的逻辑关系。PO设计模式一、PO设计模式的优点PO模式有以下优点1、可以减少了代码的重复编写。2、PO模式把页面元素定位和业务操作流程分开界面元素的变化则不需要修改业务逻辑代码。3、 PO能提高代码的可读性高复用性可维护性。二、非PO设计模式为了更好地进行对比分析我们先看看非PO设计模式test_logintest.py代码直接执行所有的流程操作不做任何封装from time import sleepimport pytestfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysclass Test_logintest():def test_1(self): driverwebdriver.Firefox() driver.get(http://10.5.1.247/dvwa/login.php) sleep(1) driver.find_element_by_name(username).send_keys(admin) driver.find_element_by_name(password).send_keys(password) driver.find_element_by_name(Login).click() sleep(2) driver.find_element_by_link_text(XSS (Reflected)).click() sleep(2) driver.find_element_by_name(name).send_keys(nick) sleep(1) driver.find_element_by_xpath(//input[valueSubmit]).click() sleep(1)ifname ‘main’:pytest.main([-sq, test_logintest.py])三、PO设计模式接下来我们看看PO设计模式基础层打开浏览器、封装元素定位BasePage.py代码from selenium.webdriver.common.by import Byclass BasePage(object):def __init__(self,driver,urlNone): self.driverdriver self.urlurl if self.url!None: self.driver.get(self.url) def by_name(self,id): locator(By.NAME,id) eleself.driver.find_element(*locator) return ele def by_linktext(self,linktext): locator(By.LINK_TEXT,linktext) eleself.driver.find_element(*locator) return ele def by_xpath(self,xpath): locator(By.XPATH,xpath) eleself.driver.find_element(*locator) return elePO层页面元素获取页面基础操作DvwaPage.py代码from time import sleepfrom myPytest.test_case.BasePage import *class DvwaPage(BasePage):def usernameText(self): eleself.by_name(username) return ele def passwordText(self): eleself.by_name(password) return ele def linkText(self): eleself.by_linktext(XSS (Reflected)) return ele def Submit(self): ele self.by_name(Login) return ele def login_dvwa(self,username,password): self.usernameText().send_keys(username) self.passwordText().send_keys(password) self.Submit().click() sleep(2) def search(self,str): #这里是通过调用linkText方法 self.linkText().click() #这里是直接调用by_name函数 self.by_name(name).send_keys(str) sleep(1) # 这里是直接调用by_xpath函数 self.by_xpath(//input[valueSubmit]).click() sleep(1)运行运行测试用例层业务逻辑和数据驱动的执行test_loginDvwa.py代码import pytestfrom myPytest.test_case.DvwaPage import *from selenium import webdriverclass Test_loginDvwa():def test_login(self): self.driverwebdriver.Firefox() self.urlhttp://10.5.1.247/dvwa/login.php usernameadmin passwordpassword srDvwaPage(self.driver,self.url) sr.login_dvwa(username,password) sr.search(nick)ifname ‘main’:pytest.main([-sq, test_loginDvwa.py])执行结果如下四、错误原因排查我在执行代码时会出现TypeError: ‘module’ object is not callable这个错误程序代码 import pytestfrom myPytest.test_case import DvwaPagefrom selenium import webdriverclass Test_loginDvwa():def test_login(self): self.driverwebdriver.Firefox() self.urlhttp://10.5.1.247/dvwa/login.php usernameadmin passwordpassword srDvwaPage(self.driver,self.url) sr.login_dvwa(username,password) sr.search(nick)执行代码后会报错srDvwaPage(self.driver,self.url)E TypeError: ‘module’ object is not callable原因分析Python导入模块的方法有两种import 模块 和 from 模块 import *前者导入后在使用时需加上模块名的限定而后者则不需要。解决方式from myPytest.test_case import DvwaPagesrDvwaPage.DvwaPage(self.driver,self.url)或from myPytest.test_case.DvwaPage import *srDvwaPage(self.driver,self.url)最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料这些资料希望能给你前进的路上带来帮助。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。