Python Selenium自动化测试PO设计模式实战

Python Selenium自动化测试PO设计模式实战,第1张

概述PageObject设计模式自动化测试非常重要的一环,很多新入门自动化测试难以理解,先来看官网对PO说明:1、设计原则ThepublicmethodsrepresenttheservicesthatthepageoffersTrynottoexposetheinternalsofthepageGenerallydon'tmakeassertionsMethodsreturnoth

  Page Object设计模式是自动化测试非常重要的一环,很多新入门自动化测试难以理解,先来看官网对PO说明:

1、设计原则

The public methods represent the services that the page offersTry not to expose the internals of the pageGenerally don't make assertionsMethods return other PageObjectsNeed not represent an entire pageDifferent results for the same action are modelled as different methods

  翻译如下:

  公共方法表示页面提供的服务

  不要暴露页面的细节

  Page设计中不要出现断言,应该写在测试用例类中

  方法应该返回其它的Page对象

  不要去代表整个page

  不同的结果返回不同的方法,不同的模式

从字面理解还是比较困难,我们继续看官网例子,官网例子为java

public class LoginPage {    private final WebDriver driver;    public LoginPage(WebDriver driver) {        this.driver = driver;        // Check that we're on the right page.        if (!"Login".equals(driver.getTitle())) {            // Alternatively, we Could navigate to the login page, perhaps logging out first            throw new IllegalStateException("This is not the login page");        }    }    // The login page contains several HTML elements that will be represented as WebElements.    // The locators for these elements should only be defined once.        By usernameLocator = By.ID("username");        By passwordLocator = By.ID("passwd");        By loginbuttonLocator = By.ID("login");    // The login page allows the user to type their username into the username fIEld    public LoginPage typeUsername(String username) {        // This is the only place that "kNows" how to enter a username        driver.findElement(usernameLocator).sendKeys(username);        // Return the current page object as this action doesn't navigate to a page represented by another PageObject        return this;        }    // The login page allows the user to type their password into the password fIEld    public LoginPage typePassword(String password) {        // This is the only place that "kNows" how to enter a password        driver.findElement(passwordLocator).sendKeys(password);        // Return the current page object as this action doesn't navigate to a page represented by another PageObject        return this;        }    // The login page allows the user to submit the login form    public HomePage submitLogin() {        // This is the only place that submits the login form and expects the destination to be the home page.        // A seperate method should be created for the instance of clicking login whilst expecting a login failure.         driver.findElement(loginbuttonLocator).submit();        // Return a new page object representing the destination. Should the login page ever        // go somewhere else (for example, a legal disclaimer) then changing the method signature        // for this method will mean that all tests that rely on this behavIoUr won't compile.        return new HomePage(driver);        }    // The login page allows the user to submit the login form kNowing that an invalID username and / or password were entered    public LoginPage submitLoginExpectingFailure() {        // This is the only place that submits the login form and expects the destination to be the login page due to login failure.        driver.findElement(loginbuttonLocator).submit();        // Return a new page object representing the destination. Should the user ever be navigated to the home page after submiting a login with credentials         // expected to fail login, the script will fail when it attempts to instantiate the LoginPage PageObject.        return new LoginPage(driver);        }    // Conceptually, the login page offers the user the service of being able to "log into"    // the application using a user name and password.     public HomePage loginAs(String username, String password) {        // The PageObject methods that enter username, password & submit login have already defined and should not be repeated here.        typeUsername(username);        typePassword(password);        return submitLogin();    }}

 

以上学习依然费劲,下面我们以登录为例,用PageObject模式开发脚本:

login.py  登录类Page

#_*_Coding:utf-8_*_#大牛测试#qq:2574674466#2574674466@qq.comclass loginPage(base):  #对用户名元素封装    def username(self):        return self.by_ID("nloginname")    #对密码元素封装    def passwd(self):        return  self.by_ID("npwd")    #对登录按钮封装    def btn(self):        return  self.by_ID("nsubmit")    #对登录方法封装    def LoginIn(self,username,passwd):        self.username().send_keys(username)        self.passwd().send_keys(passwd)        self.btn().click()

 

base.py  基类封装,

#_*_Coding:utf-8_*_#大牛测试#qq:2574674466#2574674466@qq.comclass base():    def __init__(self,driver):        self.driver = driver     #ID定位    def by_ID(self,element):        return  self.driver.find_element_by_ID(element)    #name定位    def by_name(self,element):        return self.driver.find_element_by_name(element)    #xpath定位    def by_xpath(self,element):        return  self.driver.find_element_by_xpath(element)

 

loginTest.py  登录测试类

#_*_Coding:utf-8_*_#大牛测试#qq:2574674466#2574674466@qq.comclass logingTest(unittest.TestCase):    def setUp(self):      #初始化        self.driver = webdriver.Chrome(path)    def test_01(self):        lo=loginPage(self.driver)        l=lo.LoginIn("","")    def tearDown(self):      #执行完成后退出       self.driver.quit()if __name__ == '__main__':     unittest.main()

 

总结

以上是内存溢出为你收集整理的Python Selenium自动化测试PO设计模式实战全部内容,希望文章能够帮你解决Python Selenium自动化测试PO设计模式实战所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存