selenium实现模块化

来源:互联网 发布:学校网络系统集成方案 编辑:程序博客网 时间:2024/05/21 18:31

在selenium的自动化脚本中,有许多东西是总是调用的,比如登陆,那么就可以将其模块化,独立出来,从而可以使自动化脚本更加简洁.如下以登陆为例来实现模块化:

现有一个自动化脚本如下,为验证是否正常登陆的:

test1.py

# -*- coding: UTF-8 -*-'''Created on 2015年3月28日@author: dff'''from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionimport unittest, time, refrom selenium.webdriver.support.wait import WebDriverWaitclass Login_user(unittest.TestCase):    def setUp(self):        self.driver =webdriver.Firefox()        self.driver.implicitly_wait(30)        self.base_url = "http://192.168.11.14/"        self.verificationErrors = []        self.accept_next_alert = True        self.driver.get(self.base_url + "/auth/login/")                          def test_login_admin(self):        '''管理员用户登陆'''        driver=self.driver        time.sleep(0.5)        driver.find_element_by_id("id_username").clear()        driver.find_element_by_id("id_username").send_keys("admin")                driver.find_element_by_id("id_password").clear()        driver.find_element_by_id("id_password").send_keys("ADMIN_PASS")        driver.find_element_by_xpath("//button[@type='submit']").click()        driver.get_window_position(windowHandle)        d=driver.get_window_size('current')        print d        print driver.get_window_position("current")        url=driver.current_url        print url        handle=driver.current_window_handle        print handle        self.assertEqual( u"使用概况 - Delicate Cloud Dashboard", driver.title,'login fail')       def is_element_present(self, how, what):        try: self.driver.find_element(by=how, value=what)        except NoSuchElementException: return False        return True        def is_alert_present(self):        try: self.driver.switch_to_alert()        except NoAlertPresentException: return False        return True        def close_alert_and_get_its_text(self):        try:            alert = self.driver.switch_to_alert()            alert_text = alert.text            if self.accept_next_alert:                alert.accept()            else:                alert.dismiss()            return alert_text        finally: self.accept_next_alert = True        def tearDown(self):        self.driver.quit()        self.assertEqual([], self.verificationErrors)if __name__ == "__main__":    unittest.main()
下面需要将login那部分模块化,即如下部分
        driver.find_element_by_id("id_username").clear()        driver.find_element_by_id("id_username").send_keys("admin")                driver.find_element_by_id("id_password").clear()        driver.find_element_by_id("id_password").send_keys("ADMIN_PASS")        driver.find_element_by_xpath("//button[@type='submit']").click()
那么我们新建一个module,为action.py,如下:

# -*- coding:UTF-8 -*-'''Created on 2015年4月2日@author: dff'''import unittest,timefrom  selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionfrom selenium.webdriver.support.wait import WebDriverWaitclass lo():    def __init__(self,driver):        self._driver=driver    def login_(self,name='admin',pw='ADMIN_PASS'):         self._driver.find_element_by_id("id_username").clear()        self._driver.find_element_by_id("id_username").send_keys(name)        self._driver.find_element_by_id("id_password").clear()        self._driver.find_element_by_id("id_password").send_keys(pw)        self._driver.find_element_by_xpath("//button[@type='submit']").click()

另外此文件的放置位置我放在另外一个package中,路径如下:

webtest-->src-->justfortest/test1.py

                             common/action.py

那么在test1.py中调用可以用如下方法:

本例中将此登陆调用放在setup函数中:

首先需要import此模块,如

from common.action import lo

修改后部分代码如下:

class Login_user(unittest.TestCase):    def setUp(self):        self.driver =webdriver.Firefox()        self.driver.implicitly_wait(30)        self.base_url = "http://192.168.11.14/"        self.verificationErrors = []        self.accept_next_alert = True        self.driver.get(self.base_url + "/auth/login/")        lo(self.driver).login_()
上面代码中红色部分即为调用登陆,实测结果如下:

{u'width': 1164, u'height': 629}
{u'y': 24, u'x': 436}
http://192.168.11.14/admin/
{ce3619ce-bb1b-492f-ba92-6585e05f8416}
.
----------------------------------------------------------------------
Ran 1 test in 10.524s

OK


如此即可将test_admin_login函数中的登陆部分去掉,实现模块化脚本;

以此为方法,可将其他部分模块化,如退出,切换目录等;


0 0