selenium2-python25-自動化測試模型-登錄模塊化

atian1986 8年前發布 | 81K 次閱讀 Selenium 測試工具

來自: http://my.oschina.net/TTSK/blog/614885


    通過上一節對測試模型的學習可以發現,在我們的目前的腳本中有很多代碼是可以模塊化的,比如登 錄模塊。我們的每一個用例的執行都需要登錄腳本,那可我們是否可以將登錄腳本獨立到單獨的文件調用。 

    下面就以百度登錄退出測試用例為例:

    

#   coding:utf-8

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest,time
import login

class Login(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url ='http://www.baidu.com'
        self.verficationErrors = []
        self.accept_next_alert =True

    def test_login(self):
        driver = self.driver
        driver.get(self.base_url)
        driver.maximize_window()
        
        # #登錄
        driver.find_element_by_xpath(".//*[@id='u1']/a[7]").click()
        time.sleep(2)
        driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__userName']").clear()
        time.sleep(2)
        driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__userName']").send_keys('xxxx')
        time.sleep(2)
        driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__password']").clear()
        time.sleep(2)
        driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__password']").send_keys('xxxx')
        time.sleep(2)
        driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__submit']").click()
        time.sleep(2)

        # #退出
        # div = driver.find_element_by_id('s_user_name_menu')
        # div.find_element_by_xpath(".//*[@id='s_user_name_menu']/div/a[5]/text()").click()
        # # div.find_element_by_class_name('quit').click()
        #
        # time.sleep(2)
        # driver.find_element_by_xpath(".//*[@id='tip_con_wrap']/div[3]/a[3]").click()
        # time.sleep(2)
        # print  '成功退出賬戶'


    def tearDown(self):
        self.driver.quit()
        self.assertEqual([],self.verficationErrors)

if __name__ == '__main__':
    unittest.main()

在與 baidu.py 相同的目錄下創建 login.py 文件,腳本內容如下: 

#   coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import unittest,time

#登錄模塊(函數)
def login(self):
    driver =self.driver
    driver.maximize_window()
    driver.find_element_by_xpath(".//*[@id='u1']/a[7]").click()
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__userName']").clear()
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__userName']").send_keys('xxxx')
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__password']").clear()
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__password']").send_keys('xxxx')
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__submit']").click()
    time.sleep(2)

通過上面的例子我們明顯的發現類的方法與函數有一個明顯的區別,在類的方法中必須有個額外的第 一個參數(self),但在調用類的方法時卻不必為這個參數賦值。self 參數所指的是對象本身,所以習慣

性地命名為 self。

為何 Python 給 self 賦值而你不必給 self 賦值?

創建了一個類 MyClass,實例化 MyClass 得到了 MyObject 這個對象,然后調用這個對象的方法 MyObject.method(a,b),在這個過程中,Python 會自動轉為 Myclass.method(MyObject,a,b),這就是 Python 的 self 的原理。即使你的類的方法不需要任何參數,但還是得給這個方法定義一個 self 參數,雖然我們 在實例化調用的時候不用理會這個參數。

下面回到用例本身來討論如何模塊化和調用的,在 login.py 文件中:

def login(self):
   driver = self.driver

這里用到的是方法,(driver = self.driver)driver 為對象身的 driver,這一句很重要,否則我們 無法在 ligin()方法中使用 driver 操作瀏覽器。

在 baidu.py 文件中:

#導入登錄文件import login ......

#調用登錄模塊login.login(self)

......

首先導入 login 文件,然后對文件中的 login()方法進行調用。 

 本文由用戶 atian1986 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!