【发布时间】:2018-02-15 13:01:06
【问题描述】:
我正在构建一个自定义类来为 Python 3.6.2 上的 selenium.webdriver.Chrome 添加功能。
from selenium import webdriver
class MyChrome:
def __init__(self):
self.mydriver = webdriver.Chrome()
到目前为止,除了我自己制作的一些自定义方法之外,我曾经覆盖过一些selenium.webdriver.Chrome 非常标准的方法,例如:
def get(self, url):
self.mydriver.get(url)
因为我不想浪费时间像get、find_element_by_xpath 等这样的方法进行重写……这对我来说已经很好了,我尝试了以下方法,建议here 和here
def __getattr__(self, name, *args, **kwargs):
return getattr(self.mydriver, name)(*args, **kwargs)
但是当我运行以下代码时
from selenium import webdriver
class MyChrome:
def __init__(self):
self.mydriver = webdriver.Chrome()
def __getattr__(self, name, *args, **kwargs):
return getattr(self.mydriver, name)(*args, **kwargs)
chrome = MyChrome()
chrome.get('https://stackoverflow.com/')
我遇到了错误
Traceback (most recent call last):
File "MyChrome.py", line 11, in <module>
chrome.get('https://stackoverflow.com/')
File "MyChrome.py", line 8, in __getattr__
return getattr(self.mydriver, name)(*args, **kwargs)
TypeError: get() missing 1 required positional argument: 'url'
如何将我的对象 chrome 上调用的未知方法的调用重定向到它的实例变量 self.driver?
【问题讨论】:
-
return getattr(self.mydriver, name)(self, *args, **kwargs)
标签: python selenium oop attributes