第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Page Object設(shè)計(jì)模式實(shí)操

Page Object设计模式实操

文章出处:菜鸟可米---原文地址

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

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

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

复制代码

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom 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()

复制代码

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

  下面将对上面代码加以说明,首先创建一个基础类,在初始化方法__init__()中定义驱动(driver),基本的URL(base_url)和超时时间(timeout)等。定义open()方法用于打开URL,这里是由_open()方法来实现,而find_element()方法用于元素定位。

  接下来的BasePage类中定义的方法都是页面操作的基本方法。LoginPage类并继承BasePage类,这也是Page Object设计模式中最重要的对象层。LoginPage类中主要对登录页面上元素进行封装,使其成为具体的操作方法。如对用户名、密码框和登录按钮都封装成方法。

  然后定义test_user_login()函数将单个元素操作组成一个完整的动作,包含打开浏览器、输入用户名、密码并点击登录按钮等。使用时将driver、username、password作为函数的入参,这样的函数具有很强的可重用性。

  最后使用main()函数进行用户操作行为,现在只关心用哪个浏览器、登录的用户名和密码是什么,至少输入框、按钮是如何定位的,则不关心。即实现了不同层关心不同问题。如果有多个用户名/密码需要登录,那么只用改写main()方法的参数即可。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消