gpt4 book ai didi

python - Python 中的 Selenium WebElement 扩展方法

转载 作者:行者123 更新时间:2023-12-05 05:17:26 25 4
gpt4 key购买 nike

想问一下是否有机会在 Selenium/Appium 框架中为 WebElement 类创建所谓的扩展方法。我意识到 Python 没有扩展方法,但有些事情可以通过猴子修补来实现,但我一直在努力这样做。

让我举个例子

在我的框架中,我有寻找元素的功能:

    def find_element_with_wait(self, findby_and_locator, time_to_wait=5, dynamicaly_created=False):
"""Finds element on the screen with 5 seconds timeout as default. Timeout can be specified in function parameters as integer. Returns WebElement if element exists and None whene there is no such element"""
find_by, selector = None, None

if isinstance(findby_and_locator, dict):
if DeviceData()._platformName == 'iOS':
find_by, selector = findby_and_locator.get('iOS')
else:
find_by, selector = findby_and_locator.get('Android')

elif isinstance(findby_and_locator, tuple):
find_by, selector = findby_and_locator

self._wait_for_DOM_presence(find_by, selector, time_to_wait)

try:
element = self.driver.find_element(find_by, selector)
except NoSuchElementException:
print(' Seeked element was not found. Return element = None')
element = None

现在我已经找到了 element,它是 WebElement 类的对象,我想在此元素上执行与上面相同的功能,以在其中找到另一个元素(子元素,后代元素)。

有可能在 Python 中实现这样的事情吗?我在 C# 中完成了此操作,但在这种情况下我束手无策。

这将使我更容易为我的应用程序编写测试

最佳答案

您可以执行以下操作,我认为这是一种干净且正确的 oop 处理方式:

制作一个当然继承自 WebElement 的自定义 WebElement 类:

class CustomElement(WebElement):
...your custom functions here

创建一个继承自 WebDriver 的自定义 WebDriver 类

class CustomWebDriver(WebDriver):
_web_element_cls = CustomElement
...your custom functions here

解释:每次搜索元素时,都会返回存储在 _web_element_cls 中的类。如果我们深入研究 selenium 的代码,我们会看到 WebDriver 调用 find_element(s) 方法作为搜索元素的“基本”函数,最终调用 create_web_element 方法,并在该方法中使用存储在 _web_element_cls 中的类创建 WebElement。

关于python - Python 中的 Selenium WebElement 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49198034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com