我怎样才能使selen''find_element'不是静态的?

时间:2017-11-22 02:25:22

标签: python selenium

我不知道如果我表达自己是对的,但我的问题是我有这个代码:

def select_chat():
    driver.implicitly_wait(10)
    while True:
        chat_unread = driver.find_element_by_class_name('chat-drag-cover')
        chat_contains = chat_unread.get_attribute('innerHTML')
        if 'chat_unread' in chat_contains:
            chat_unread.click()

select_chat()

所以这个函数应该找到多个包含'chat unread'的元素,问题是它确实找到了元素,但它锁定了其中一个元素而不是其他元素,我该怎么办?

1 个答案:

答案 0 :(得分:0)

让我们看一下代码中发生的事情:

当您find_element_by_class_name('chat-drag-cover')时,会返回第一个匹配项(即WebElement),并将其存储在chat_unread中。 示例:

<selenium.webdriver.remote.webelement.WebElement (session="11a81cb13625b168f875de3b10dca3c5", element="0.3018415455432639-1")>

接下来,我们将重新审核'innerHTML'并将其存储在chat_containsString)中。 例如:

Explore the life and work

最后,我们正在尝试验证if 'chat_unread' in chat_contains:。这相当于:

如果字符串 <selenium.webdriver.remote.webelement.WebElement (session="11a81cb13625b168f875de3b10dca3c5", element="0.3018415455432639-1")>

包含

Explore the life and work ,始终为 False

因此永远不会调用click(),我们会再次回到driver.find_element_by_class_name

所以解决方案是使用driver.find_elements_by_class_name("foo")返回一个列表,如下所示:

chat_unread = driver.find_elements_by_class_name('chat-drag-cover')

最后, WebElement 本身,例如 chat unread 不得参与任何验证,但应使用其属性,例如的 innerHTML