Python Selenium - 检查一个 WebElement 是否等于另一个 WebElement

Mar*_*.G. 1 python selenium webdriver getattribute selenium-webdriver

如何比较两个 selenium WebElements 以查看它们是否相同?

首先我检索一个列表input_fieldsfirst_input元素:

self.input_fields = driver.find_elements(By.CLASS_NAME, class_name) self.first_input = driver.find_element(By.ID, id)

然后我尝试检查input_fields[0]first_input是否是同一个 WebElement。

if self.first_input is not self.input_fields[0]:
    self.__log.warning("WebElement first_input : {} != {}".format(self.first_input, self.input_fields[0]))
Run Code Online (Sandbox Code Playgroud)

尽管sessionelement相同,但无论如何都会触发警告消息。

WARNING  - WebElement first_input: <selenium.webdriver.remote.webelement.WebElement (session="796bf0bcf3e0df528ee932d477951689", element="94a2ee62-9511-45e5-8aa3-bd3d3e9be309")> != <selenium.webdriver.remote.webelement.WebElement (session="796bf0bcf3e0df528ee932d477951689", element="94a2ee62-9511-45e5-8aa3-bd3d3e9be309")>
Run Code Online (Sandbox Code Playgroud)

Mar*_*.G. 5

编辑:使用!=代替is not可以解决所有问题:

if self.first_input != self.input_fields[0]:
Run Code Online (Sandbox Code Playgroud)

解决方案

if self.first_input.id == self.input_fields[0].id:
    self.__log.info("Same element {} , {}".format(self.first_input.id, self.input_fields[0].id))
Run Code Online (Sandbox Code Playgroud)

阅读文档我找到了id属性,其定义用作私有属性的 getter_id

@property
def id(self):
    """Internal ID used by selenium.

    This is mainly for internal use. Simple use cases such as checking if 2
    webelements refer to the same element, can be done using ``==``::

        if element1 == element2:
            print("These 2 are equal")

    """
    return self._id
Run Code Online (Sandbox Code Playgroud)

来源

class WebElement(object):
    def __init__(self, parent, id_, w3c=False):
        self._parent = parent
        self._id = id_
        self._w3c = w3c
Run Code Online (Sandbox Code Playgroud)

笔记:

print("{}".format(self.first_input.id))
Run Code Online (Sandbox Code Playgroud)

给我们元素 id,它与我们在对象中看到的相同。

94a2ee62-9511-45e5-8aa3-bd3d3e9be309
Run Code Online (Sandbox Code Playgroud)