在Selenium中使用驱动程序.find_element(按.CLASS_NAME,“列表卡片标题”)时出现NoSuchElementException

dffbzjpn  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(164)

对于以下代码行:

driver.find_element(By.CLASS_NAME,'list-card-heading')

我收到以下错误:

NoSuchElementException                    Traceback (most recent call last)
Input In [23], in <cell line: 1>()
1 driver.find_element(By.CLASS_NAME,'list-card-heading')

最初我有:

driver.find_element_by_class_name('list-card-heading')

但在代码中做了一些修改,在下面两行中添加了以下内容:

from selenium.webdriver.common.by import By
driver.find_element(By.CLASS_NAME,'list-card-heading')

我预期会得到以下结果:

<selenium.webdriver.remote.webelement.WebElement (session="945ae2a8da0536bea44330c4bbf0b24e", element="581cbcf9-7bb9-40dd-8601-4109cad55272")

但得到了这个错误:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".list-card-heading"}

是驱动程序问题还是selenium库问题。

doinxwow

doinxwow1#

这行代码:

driver.find_element_by_class_name('list-card-heading')

selenium3中,等效于:

driver.find_element(By.CLASS_NAME,'list-card-heading')

使用selenium4
可能AUT(Application Under Test)已更改或者是动态元素,这就是您看到错误的原因。

此用例

要识别***visible***元素,理想情况下需要为visibility_of_element_located()引入WebDriverWait,并且可以使用以下locator strategies之一:

element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, "list-card-heading")))
    • 注意**:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
abithluo

abithluo2#

当webdriver找不到使用给定定位器策略的元素时,将抛出NoSuchElementException
虽然有时候这是因为一个合法的坏xpath,在我的经验,这往往是因为一个dom定时问题,这可能是由各种各样的事情,无论是在您的代码,或在网站的事情。

溶液

我建议使用WebDriverWait来确保一个元素在尝试与之交互之前存在。下面是一个可能的示例:

//Declare your driver as you normally would
WebDriverWait wait = WebDriverWait(driver, 10)
wait.until(len(driver.find_elements(By.CLASS_NAME,'list-card-heading')) != 0)
driver.find_element(By.CLASS_NAME,'list-card-heading')

相关问题