我正在构建一个自定义类,以便在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
之类的方法那样浪费时间重写......这对我来说已经很好了,我尝试了以下内容,正如所建议的那样{{ 3}}和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
?
答案 0 :(得分:2)
我创建了一个自定义Webdriver,以便为selenium Chrome Webdriver添加功能,我通过继承selenium Chrome Webdriver来实现。这样就可以在没有getattr
的情况下继承所有webdriver方法from selenium.webdriver import Chrome
class MyChrome(Chrome):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# add all your custom features
它没有为您的问题提供答案,但您可以利用