最开始也是和大多数一样先写个方法去定义一个驱动每次都要传入一个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_urlimport 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)
好在思考更好的优化。。。。。待续。。。。