'TestSearch' object has no attribute 'options'
来源:3-5 页面对象开发的第一种实现方式

慕九州7187113
2021-08-05
bo_demo
import time
from selenium.webdriver import *
from typing import Type, Union
class BrowserTypeError(Exception):
def init(self, _type):
self._type = _type
def __str__(self):
return f'unsupported browser type: {self._type}'
class BROWSER:
CHROME_DRIVER_PATH = r’D:\Program Files\Python\Python39\Scripts\chromedriver.exe’
IE_DRIVER_PATH = r’C:\Program Files\Internet Explorer\iexplore.exe’
""“窗口大小即显示尺寸”"“
WINDOW_SIZE = (1024, 768)
”"“隐式等待时间”"“
IMP_TIME = 30
"”“页面加载时间”"“
PAGE_LOAD_TIME = 20
"”“JS执行超时时间”"“
SCRIPT_TIME_OUT = 20
"”“浏览器无头化”""
HEADLESS = True
def __init__(self, browser_type: Type[Union[Firefox, Chrome, Ie, Edge, Opera]] = Chrome,
options_type: Type[Union[FirefoxOptions, ChromeOptions, IeOptions]] = ChromeOptions,
driver_path: str = CHROME_DRIVER_PATH):
if not issubclass(browser_type, (Firefox, Chrome, Ie, Edge, Opera)):
raise BrowserTypeError(browser_type)
if not issubclass(options_type, (FirefoxOptions, ChromeOptions, IeOptions)):
raise BrowserTypeError(options_type)
if not isinstance(driver_path, str):
raise TypeError
self._browser = browser_type
self._option = options_type
self._path = driver_path
@property
def options(self):
"""浏览器特定的操作,在子类中实现
:return:
"""
return
@property
def broswer(self):
"""启动浏览器,返回浏览器实例
:return:
"""
return
class CHROME(BROWSER):
OPTION_MARK = True
METHOD_MARK = True
HEADLESS = False
IMP_TIME = 30
PAGE_LOAD_TIME = 30
SCRIPT_TIME_OUT = 30
WINDOW_SIZE = (1920, 900)
START_MAX = ‘–start-maximized’
"""
第一行表示: chrome浏览器的左上角不会展示 chrome浏览器当前正在受到自动化软件控制 这一行提示
第二行表示:chrome会以移动模拟的形式打开某个网页,一般做普通web测试时,这个参数一般不用。当在使用h5网页的时候,需要在浏览器中实现的话,就需要这个参数
"""
EXP = {
'excludeSwitches': ['enable-automation'],
'mobileEmulation': {'deviceName': 'iPhone 6'}
}
@property
def options(self):
if self.OPTION_MARK:
chrome_option = self._option()
chrome_option.add_argument(self.START_MAX)
for k, v in self.EXP.items():
chrome_option.add_experimental_option(k, v)
chrome_option.headless = self.HEADLESS
return chrome_option
return None
"chrome的启动以及实例的返回"
@property
def browser(self):
if self.options:
chrome = self._browser(self._path, options=self.options)
else:
chrome = self._browser(self._path)
if self.METHOD_MARK:
chrome.implicitly_wait(self.IMP_TIME)
chrome.set_script_timeout(self.SCRIPT_TIME_OUT)
chrome.set_page_load_timeout(self.PAGE_LOAD_TIME)
chrome.set_window_size(*self.WINDOW_SIZE)
return chrome
class IE(BROWSER):
CLEAN_SESSION = True
def __init__(self):
super(IE, self).__init__(browser_type=Ie,
options_type=IeOptions,
driver_path=super().IE_DRIVER_PATH)
@property
def options(self):
ie_option = self._option()
ie_option.ensure_clean_session = self.CLEAN_SESSION
return ie_option
"chrome的启动以及实例的返回"
@property
def browser(self):
ie = self._browser(self._path, options=self.options)
ie.implicitly_wait(self.IMP_TIME)
ie.set_page_load_timeout(self.PAGE_LOAD_TIME)
ie.set_script_timeout(self.SCRIPT_TIME_OUT)
ie.maximize_window()
return ie
po_demo
from bo_demo import *
class Page:
url = None
driver = None
def element(self, loc: tuple):
"""定位元素的方法
:param loc:
:return:
"""
return self.driver.find_element(*loc)
def elements(self, loc: tuple):
"""定位一组元素或者多个元素
:param loc:
:return:
"""
return self.driver.find_elements(*loc)
class CommonLoginPage(Page):
url = r’http://127.0.0.1/zentao/user-login.html’
driver = CHROME.browser
username = (‘id’, ‘account’)
password = (‘name’, ‘password’)
loginBtn = (‘id’, ‘submit’)
def get(self):
"""打开首页地址"""
self.driver.get(self.url)
def login(self, username: str = 'admin', password: str = 'Lemon0720'):
self.element(self.username).send_keys(username)
self.element(self.password).send_keys(password)
self.element(self.loginBtn).click()
class Search(CommonLoginPage):
searchInput = (‘id’, ‘searchInput’)
searchGo = (‘id’, ‘searchGo’)
user_name = (‘xpath’, ‘//span[@class=“user-name”]’)
bug_label = (‘xpath’, ‘//span[@class=“label label-id”]’)
def search_bug(self, bug_id: str = 1):
self.element(self.searchInput).send_keys(bug_id)
self.element(self.searchGo).click()
class TestSearch(Search):
def test_login(self):
self.get()
self.login()
assert self.element(self.user_name).text == ‘admin’
def test_search(self):
self.search_bug()
assert self.element(self.bug_label).text == 1
if name == ‘main’:
obj = TestSearch()
obj.test_login()
obj.test_search()
请问老师,是哪里有问题,检查了好久
1回答
-
慕九州7187113
提问者
2021-08-06
老师,我自己找到问题了。。。
driver = CHROME.browser 应该修改为 driver = CHROME().browser012021-08-06
相似问题