我不知道如果我表达自己是对的,但我的问题是我有这个代码:
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'的元素,问题是它确实找到了元素,但它锁定了其中一个元素而不是其他元素,我该怎么办?
答案 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_contains
(String
)中。
例如:
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
强>