has no attribute_option
来源:3-5 页面对象开发的第一种实现方式

qq_staythelonel_03501794
2021-07-08
# 浏览器的类型(Chrome,ie,firefox)
# 浏览器启动参数(无头化,最大化,尺寸华)
# 浏览器的属性(显示尺寸,隐式等待/页面加载/js执行时间)
from selenium.webdriver import *
from typing import Type, Union
class BrowserTypeError(Exception):
def __int__(self, _type):
self._type = _type
def __str__(self):
return f'unsupported browser type:{self._type}'
class BROWSER:
CHROM_DRIVER_PATH = r'd:\chromedriver.exe'
EDG_DRIVER_PATH = r'd:\msedgedriver.exe'
WINDOWS_SIZE = (1024, 768)
IMP_TIME = 30
PAGE_LOAD_TIME = 20
SCRIP_TIME_OUT = 20
HEAD_LESS = True
def __int__(self, browser_type: Type[Union[Chrome, Ie, Edge, Firefox]] = Chrome,
option_type: Type[Union[ChromeOptions, IeOptions, FirefoxOptions]] = ChromeOptions,
driver_path: str = CHROM_DRIVER_PATH):
# 类型校验
if not issubclass(browser_type, (Chrome, Ie, Edge, Firefox)):
raise BrowserTypeError
if not issubclass(option_type, (ChromeOptions, IeOptions, FirefoxOptions)):
raise BrowserTypeError
if not isinstance(driver_path, str):
raise TypeError
self._path = driver_path
self._browser = browser_type
self._option = option_type
# @property装饰器会将方法转换为相同名称的只读属性
@property
def options(self):
'''
浏览器特定的操作,在子类中实现
:return:
'''
return
@property
def browser(self):
'''
启动浏览器,返回浏览器实例
:return:
'''
return
class CHROME(BROWSER):
METHED_MARK = True
OPTION_MATK = True
HEAD_LESS = False
IMP_TIME = 30
PAGE_LOAD_TIME = 30
SCRIP_TIME_OUT = 30
WINDOWS_SIZE = (1920, 900)
STRAT_MAX = '--start-maximized'
EXP = {
# 不会显示正在受到自动软软件控制,移动模拟的形式打开,web时不需要
'excludeSwitches': ['enable-automation'],
'mobileEmulation': {'deviceName': 'iphone 6'}
}
@property
def options(self):
"""
chrome浏览器特有的操作属性
:return:
"""
if self.OPTION_MATK:
# 继承父类的options操作
chrome_option = self._option()
chrome_option.add_argument(self.STRAT_MAX)
for k, v in self.EXP.items():
chrome_option.add_experimental_option(k, v)
return chrome_option
return None
@property
def browser(self):
if self.options:
chrome = self._browser(self._path, options=self.options)
else:
chrome = self._browser(self._path)
if self.METHED_MARK:
chrome.implicitly_wait(self.IMP_TIME)
chrome.set_script_timeout(self.SCRIP_TIME_OUT)
chrome.set_page_load_timeout(self.PAGE_LOAD_TIME)
chrome.set_window_size(*self.WINDOWS_SIZE)
return chrome
return chrome
with CHROME().browser as _chrome:
_chrome.get('http://127.0.0.1:80/index.php')
from time import sleep
sleep(3)
请问是哪里写错了?
写回答
1回答
-
托尼老师
2021-07-09
类BROWSER的构造方法名称写错了,仔细检查一下。
012021-07-09
相似问题