栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Chrome时出现selenium“ selenium.common.exceptions.NoSuchElementException”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Chrome时出现selenium“ selenium.common.exceptions.NoSuchElementException”

NoSuchElementException

selenium.common.exceptions.NoSuchElementException
通常称为

NoSuchElementException

exception selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)

NoSuchElementException
基本上在以下两种情况下抛出:

  • 使用时:
        webdriver.find_element_by_*("expression")    //example : my_element = driver.find_element_by_xpath("xpath_expression")
  • 使用时:
        element.find_element_by_*("expression")    //example : my_element = element.find_element_by_*("expression")

根据API文档,就像其他任何文档一样

selenium.common.exceptions
NoSuchElementException
应包含以下参数:

  • 消息,屏幕,堆栈跟踪
 raise exception_class(message, screen, stacktrace)    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]"}      (Session info: chrome=61.0.3163.100)      (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.10240 x86_64)

原因

NoSuchElementException 的原因可能是以下之一:

  • 您采用的 定位器策略 无法识别 HTML DOM 中的任何元素。
  • 您采用的 定位器策略 无法识别该元素,因为该元素不在浏览器的Viewport中。
  • 您采用的“ 定位器策略” 可识别元素,但由于存在属性 style =“ display:none;”而不会显示。
  • 您采用的 定位器策略 不能 唯一地 标识 HTML DOM中 所需的元素,并且当前还可以找到其他一些 隐藏 / 不可见的 元素。
  • 您要查找的 WebElement
    <iframe>
    标签内。
  • webdriver的 实例看着外面的 WebElement 甚至之前的元素是中存在的/都看得到 HTML DOM

解决 NoSuchElementException 的解决方案可以是以下任一种:

  • 采用唯一标识所需 WebElement 的定位器策略。您可以借助 开发人员工具 (+ + 或)并使用 Element Inspector
    Ctrl`` Shift``I``F12
    __

在这里,您将找到有关如何检查selenium3.6中元素的详细讨论,因为FF56不再可以使用Firebug吗?

  • 使用
    execute_script()
    方法滚动元素以查看如下:
        elem = driver.find_element_by_xpath("element_xpath")    driver.execute_script("arguments[0].scrollIntoView();", elem)

在这里,您将找到有关使用Selenium在Python中滚动到页面顶部的详细讨论。

  • 如果元素具有属性 style =“ display:none;” ,请通过以下
    executescript()
    方法删除属性:
        elem = driver.find_element_by_xpath("element_xpath")    driver.execute_script("arguments[0].removeAttribute('style')", elem)    elem.send_keys("text_to_send")
  • 要检查元素是否在 HTML
    <iframe>
    遍历中,可以通过以下两种方法之一定位相应的标记和所需的 iframe
    <iframe>``switchTo()
        driver.switch_to.frame("iframe_name")    driver.switch_to.frame("iframe_id")    driver.switch_to.frame(1) // 1 represents frame index

在这里,您可以找到有关如何选择一个html元素(无论它处于硒中的哪个帧)的详细讨论?

  • 如果该元素在 HTML DOM中 立即不 存在 /不 可见 ,则将WebDriverWait的预期条件设置为适当的方法,如下所示: __

    • 等待 presentation_of_element_located

          element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))
    • 要等待 visible_of_element_located

          element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")
    • 等待 element_to_be_clickable

          element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.link_TEXT, "element_link_text")))

这个用例

您会看到,

NoSuchElementException
因为 id 定位器无法唯一标识 画布
。要标识画布及其
click()
上的画布,您必须等待 画布 成为 画布
clickable
并实现此目的,您可以使用以下代码块:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']"))).click()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号