重定向未知属性

时间:2018-02-15 13:01:06

标签: python selenium oop attributes

我正在构建一个自定义类,以便在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)

由于我不想像getfind_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

1 个答案:

答案 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 

它没有为您的问题提供答案,但您可以利用