作者:hi347 | 来源:互联网 | 2022-12-30 18:39
我想在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+ I或F12)的帮助并使用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']")));