【发布时间】:2022-01-23 19:25:31
【问题描述】:
我有这样的课:
class Node(WebElement):
def __init__(self, parent, id_):
super().__init__(parent, id_)
...
<some methods, and selectors in it>
我在测试中:
nodes = [node for node in self.driver.find_element_by_xpath(node_xpath)]
当然,nodes 是一个 WebElement 列表。
我想将它转换(包装)为Node 类型的列表,所以我可以简单地使用它的好处,并拥有WebElement 对象的力量。
但我想不通。
编辑:
嗯,有时 sleep 可以解决问题(我认为): 请看看这个并给我反馈:
class Node(WebElement):
# I've got rid of arg `id_`, because the parent arg has it.
# I can only assume, that somewhere in lib, the parent arg has no `id_` yet,
# and that is injected by argument... that is my guess
def __init__(self, parent):
id_ = parent.id
super().__init__(parent, id_)
...
那么为什么 WebElement 本身看起来不像这样呢?:
class WebElement(object):
def __init__(self, parent, id_=None, w3c=False):
self._parent = parent
self._id = id_ if id else parent.id
self._w3c = w3c
...不知道。这将大大简化我的生活:)
嗯,Node 设置如上,这看起来可以解决问题(我仍在检查中)
nodes = [Node(node) for node in self.driver.find_element_by_xpath(node_xpath)]
好吧,parent 参数名称现在看起来有点混乱,因为它应该是同一级别,但我想我可以接受。
编辑:
不,死路一条……
nodes[0].is_online()
Traceback (most recent call last):
...
File "<input>", line 1, in <module>
File "/pods_and_nodes_page.py", line 130, in is_online
for alarm in self.find_elements_by_xpath(self.alarms_xpath):
File "/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 381, in find_elements_by_xpath
return self.find_elements(by=By.XPATH, value=xpath)
File "/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 684, in find_elements
return self._execute(Command.FIND_CHILD_ELEMENTS,
File "/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/lib/web/common/webelement.py", line 252, in __getattribute__
return WebdriverInterceptor().func_interceptor(self, MyWebElement, attr)
File "/lib/util/webdriver/webdriver.py", line 550, in func_interceptor
func = super(webdriver_class, webdriver).__getattribute__(attr)
AttributeError: 'WebElement' object has no attribute 'execute'
...也许不是?看起来我的项目中有人修改了 lib... 它对你有用吗?
【问题讨论】:
标签: python selenium selenium-webdriver