selenium2-python25-自動化測試模型-登錄模塊化
來自: 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()方法進行調用。