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)
new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
要等待找到的元素的可见性,请执行以下操作:
new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
要等待元素可选择,请执行以下操作:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
3条答案
按热度按时间u3r8eeie1#
无接触异常
org.openqa.selenium.nosuchelementexception俗称nosuchelementexception,它扩展了org.openqa.selenium.notfoundexception,这是webdriverexception的一种类型。
nosuchelementexception可以在以下两种情况下抛出:
使用时
WebDriver.findElement(By by)
:使用时
WebElement.findElement(By by)
:根据javadocs,就像其他webdriverexception一样,nosuchelementexception应该包含以下常量字段:
原因
nosuchelementexception的原因可以是以下任一原因:
您采用的定位器策略不会标识HTMLDOM中的任何元素。
您采用的定位器策略无法识别元素,因为它不在浏览器的视口中。
您采用的定位器策略标识元素,但由于存在属性style=“display:none;”,因此不可见。
您所采用的定位器策略不能唯一地标识HTMLDOM中所需的元素,并且当前会查找其他隐藏/不可见的元素。
您尝试查找的Web元素位于
<iframe>
标签。webdriver示例甚至在元素在htmldom中出现/可见之前就开始查找webelement。
解决方案
解决nosuchelementexception的解决方案可以是以下任一种:
采用一种定位策略,唯一地标识所需的webelement。您可以借助开发人员工具(ctrl+shift+i或f12)并使用elementinspector。
在这里你会发现一个详细的讨论,如何检查元素 selenium 化 selenium 3.6作为萤火虫不再是一个选项ff 56?
使用
executeScript()
方法将元素滚动到视图中,如下所示:在这里,您将看到关于使用selenium在python中滚动到页面顶部的详细讨论
如果元素具有属性style=“display:none;”,通过删除属性
executeScript()
方法如下:检查元素是否在
<iframe>
遍历html以找到相应的<iframe>
标记和switchTo()
通过以下方法之一创建所需的iframe:在这里,您可以找到一个关于在SeleniumWebDriverJava?中不使用driver.switchto().frame(“framename”)就可以切换到框架中的元素的详细讨论?。
如果该元素在html dom中不存在/不可见,请使用expectedconditions将webdriverwait设置为正确的方法,如下所示:
要等待元素的出现,请执行以下操作:
要等待找到的元素的可见性,请执行以下操作:
要等待元素可选择,请执行以下操作:
参考
有关selenium基于python客户端的相关讨论,请参见:
selenium使用chrome时“selenium.common.exceptions.nosuchelementexception”
gr8qqesn2#
下面的代码将帮助您解决它
或者
qc6wkl3g3#
你的代码是正确的,我怀疑这个问题造成的网页没有完成加载时,你找到的元素。
试着在找元素之前加一个长睡眠,如果加睡眠起作用,就改睡眠等待。
下面是代码,如果元素不存在,则表示等待10秒: