【问题标题】:Redirect unknown attributes重定向未知属性
【发布时间】: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)

因为我不想浪费时间像getfind_element_by_xpath 等这样的方法进行重写……这对我来说已经很好了,我尝试了以下方法,建议herehere

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


【解决方案1】:

我曾经创建了一个自定义 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 

它不能回答你的问题,但你可以利用它

【讨论】:

  • 这绝对是最好的方法。我应该从一开始就扩展Chrome 类。无论如何,我一直在寻找另一种解决方案,因为目前我对这个项目非常深入,我宁愿避免大量更改代码。
猜你喜欢
  • 2017-06-03
  • 2023-01-04
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
相关资源
最近更新 更多