关于python UI Selenium自动化的一个浏览器driver重复调用问题

最开始也是和大多数一样先写个方法去定义一个驱动每次都要传入一个driver对象

class PageObject(object):
    def __init__(self, driver):
        self.driver = driver

    def test(self):
        ele = self.driver.find_element_by_id("menu-user")
        return ele

    def login(self):
        self.driver.find_element_by_id("userAccount").send_keys("admin")
        self.driver.find_element_by_id("loginPwd").send_keys(123456)
        time.sleep(2)
        self.driver.find_element_by_id("loginBtn").click()

 

from selenium import webdriver
import unittest

class Test(unittest.TestCase):

    def setUp(self):
        self.driver=webdriver.Chrome()
        print("打开浏览器")
        self.driver.get("http://www.baidu.com")
        print(self.driver.current_url)
    def tearDown(self):
        self.driver.close()
        print("close浏览器")
    def test_1(self):
        self.driver.get("http://www.vip.com")
        print(self.driver.current_url)
if __name__ == "__main__":
    unittest.main()

class Test(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(5)
        cls.driver.maximize_window()
        cls.name = "zhangsan"
        cls.url="http://192.168.229.128:8080/cms/manage/login.do"
        cls.driver.get(cls.url)
        # PageObject(cls.driver).login()
        print" i am class method ,do i before all method start"

    @classmethod
    def tearDownClass(cls):
        sleep(5)
        cls.driver.close()
        print "i am class method ,do i after all method finished"

    def test1_login(self):
        u"用户登录"
        PageObject(self.driver).login()

    def test2_action(self):
        u"用户点击"
        PageObject(self.driver).test().click()
        print "success"
--------------------- 

写着就发现太冗余了:换了个思路开始从原始控制驱动driver的产生:

from  selenium import webdriver
from selenium.webdriver.common.by import By

class Driver(object):
        @staticmethod
        def getDriver(option):

            if option=="gc":
                driver=webdriver.Chrome()
            elif option=="ff":
                driver=webdriver.Firefox()
            elif option=="ie":
                driver=webdriver.Ie()
            else:
                raise NameError("目前暂时只支持三剑客浏览器,option desc ==> gc:Chrome,ff:Firefox,ie:IE")
            driver.implicitly_wait(time_to_wait=20)
            driver.maximize_window()
            return driver



class EleUtil(Driver):

    driver=Driver.getDriver("gc")

    @staticmethod
    def find_element(*loc):
        return EleUtil.driver.find_element(*loc)
    @staticmethod
    def find_elements(*loc):
        return EleUtil.driver.find_element(*loc)

class Base(EleUtil):
    @staticmethod
    def openPage(url):
        return EleUtil.driver.get(url)
    @staticmethod
    def getTitle():
        return EleUtil.driver.current_url
import unittest
from lib.selenium_utils import *
from selenium import webdriver
from time import sleep


class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("打开浏览器")
        Base.openPage("http://www.baidu.com")
    @classmethod
    def tearDownClass(cls):
        Base.driver.quit()
        print("关闭浏览器")

    # def setUp(self):
    #     print("打开浏览器")
    #     Base().openPage("http://www.baidu.com")
    #     self.driver=Base.driver
    # def tearDown(self):
    #     self.driver.close()
    #     print("关闭浏览器")
    # tip:python 测试用例必须以test开头
    def test_method1(self):
        Base.find_element(By.ID,"kw").send_keys("selenium2 python")
        Base.find_element(By.ID,"su").click()
        print(Base.getTitle())
        sleep(2)
    def test_method2(self):
        Base.openPage("http://www.taobao.com")
        sleep(3)
        print(Base().getTitle())
if __name__ == "__main__":
    unittest.main()  #程序入口

结果还算差强人意速度很快,但是只是在setUpClass模式,一旦切换setUp模式我就会遇到

setUpClass模式

D:\Pycharm\PyCharm 5.0.4\helpers\pycharm\utrunner.py:2: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
打开浏览器
https://www.baidu.com/
https://www.vip.com/
close浏览器

Process finished with exit code 0

setUp模式

打开浏览器
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=selenium2%20python&rsv_pq=d1d6669500026f5e&rsv_t=1ff0mgHQgYolK4HKLrvUEG3KoFrtfq3PLUMXcuYMyudbDYDSHswiNEaLz4I&rqlang=cn&rsv_enter=0&rsv_sug3=16&inputT=239&rsv_sug4=239
关闭浏览器
打开浏览器

Error
Traceback (most recent call last):
  File "C:\Users\Administrator\PycharmProjects\Supro\lib\case.py", line 19, in setUp
    Base.openPage("http://www.baidu.com")
  File "C:\Users\Administrator\PycharmProjects\Supro\lib\selenium_utils.py", line 36, in openPage
    return EleUtil.driver.get(url)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: no such session
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)
好在思考更好的优化。。。。。待续。。。。


版权声明:本文为chen498858336原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。