热门标签 | 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']")));


推荐阅读
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社区 版权所有