热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NoSuchElementExeption,selenium无法定位元素

如何解决《NoSuchElementExeption,selenium无法定位元素》经验,为你挑选了1个好方法。

我想在selenium找到我的TextField,但我不知道如何(我第一次使用sellenium).

我试过了:

 driver.findElement(By.id("originTextField"))

或者由xPath和cssSelector由开发工具中的chrome生成的字符串.

请帮助我,我会很感激的解释.

这是html:

在此输入图像描述



1> DebanjanB..:

NoSuchElementException异常

org.openqa.selenium.NoSuchElementException通常称为 NoSuchElementException,它扩展了 org.openqa.selenium.NotFoundException,这是一种 WebDriverException.

可以在以下两种情况下抛出NoSuchElementException:

使用时WebDriver.findElement(By by):

//example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));

使用时WebElement.findElement(By by):

//example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));

根据JavaDocs,就像任何其他WebDriverException一样,NoSuchElementException应包含以下常量字段:

Constant Field      Type                                        Value
SESSION_ID          public static final java.lang.String        "Session ID"
e.g. (Session info: chrome=63.0.3239.108)

DRIVER_INFO         public static final java.lang.String        "Driver info"
e.g. (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86)

BASE_SUPPORT_URL    protected static final java.lang.String     "http://seleniumhq.org/exceptions/"
e.g. (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html)

原因

NoSuchElementException的原因可能是以下任一情况:

您采用的定位器策略未标识HTML DOM中的任何元素.

您采用的定位器策略无法识别元素,因为它不在浏览器的视口中.

您采用的定位器策略标识元素,但由于属性style ="display:none;"的存在而不可见..

您采用的定位器策略不能唯一标识HTML DOM中的所需元素,并且当前会找到其他隐藏/不可见元素.

您尝试查找的WebElement位于标记内.

webdriver的实例看着外面的WebElement甚至之前的元素都看得到内本/ HTML DOM.

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

采用定位策略,唯一标识所需的WebElement.您可以获取开发人员工具(Ctrl+ Shift+ IF12)的帮助并使用Element Inspector.

在这里你会找到关于如何检查selenium3.6中的元素的详细讨论,因为对于FF 56来说,firebug不再是一个选项?

使用executeScript()方法滚动元素以进行查看,如下所示:

WebElement elem = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem);

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

Incase元素具有属性style ="display:none;" ,通过executeScript()方法删除属性如下:

WebElement element = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element)
element.sendKeys("text_to_send");

要检查元素是否在遍历HTML中,以通过以下任一方法找到相应的标记和switchTo()所需的iframe:

driver.switchTo().frame("frame_name");
driver.switchTo().frame("frame_id");
driver.switchTo().frame(1); // 1 represents frame index

在这里你可以找到一个详细的讨论是否可以切换到框架中的元素而不使用Selenium Webdriver Java中的driver.switchTo().frame("frameName")?.

如果该元素是不存在/可见HTML DOM立即,诱导WebDriverWait与ExpectedConditions设定为适当的方法如下:

要等待presenceOfElementLocated:

new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));

要等待visibilityOfElementLocated:

new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));

要等待elementToBeClickable:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));


推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 出库管理 | 零件设计中的状态模式学习心得与应用分析
    出库管理 | 零件设计中的状态模式学习心得与应用分析 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • OSChina 周末闲谈 —— 程序员的浪漫情话
    在OSChina的周末闲谈栏目中,探讨了程序员特有的浪漫情话。本文不仅分享了一些程序员如何用代码表达爱意的有趣例子,还推荐了一首适合程序员聆听的歌曲——李克勤的《啜泣》。对于喜欢在编程之余享受音乐的朋友们,不妨点击链接试听一下。 ... [详细]
author-avatar
hi347
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有