Selenium 无法在浏览器中定位元素 DOM
Selenium not able to locate element in browser DOM
我有一个测试套件,我必须必须使用css选择器。
当我通过selenium进行查询时
driver.findElement(By.cssSelector("#credentials.errors"));
或
if (driver instanceof JavascriptExecutor) {
((JavascriptExecutor) driver).executeScript("document.
getElementById('credentials.errors');");
}
或
如果我在浏览器中手动搜索#credentials.errors
css路径查询
根本无法定位元素但是
我可以通过查询
在浏览器控制台中找到该元素
document.getElementById('credentials.errors')
我的问题是,如果元素可以通过 JavaScript 控制台定位,那么为什么不能通过 selenium webdriver 定位?
可能是客户端脚本在 Ajax 调用后创建的元素,所以您需要使用 WebDriverWait 等待
选择器 #credentials.errors
查找 ID 为 "credentials" 和 class "errors" 的元素, 不是 的元素ID "credentials.errors"。点被解释为 class 选择器的开始。换句话说,它等同于 .errors#credentials
,两个简单的选择器交换了。
document.getElementById()
之所以有效,是因为它只是将字符串作为输入 ID。它不会尝试将其解析为复合选择器。
要使用 ID 选择器正确定位元素,您需要转义圆点:
driver.findElement(By.cssSelector("#credentials\.errors"));
您也可以改用属性选择器,这样您就不必转义任何内容:
driver.findElement(By.cssSelector("[id='credentials.errors']"));
由于您使用 ID 查找元素,因此您可以使用以下内容而不是使用 By.cssSelector:
driver.findElement(By.Id("credentials.errors"));
我有一个测试套件,我必须必须使用css选择器。
当我通过selenium进行查询时
driver.findElement(By.cssSelector("#credentials.errors"));
或
if (driver instanceof JavascriptExecutor) {
((JavascriptExecutor) driver).executeScript("document.
getElementById('credentials.errors');");
}
或
如果我在浏览器中手动搜索#credentials.errors
css路径查询
根本无法定位元素但是 我可以通过查询
在浏览器控制台中找到该元素document.getElementById('credentials.errors')
我的问题是,如果元素可以通过 JavaScript 控制台定位,那么为什么不能通过 selenium webdriver 定位?
可能是客户端脚本在 Ajax 调用后创建的元素,所以您需要使用 WebDriverWait 等待
选择器 #credentials.errors
查找 ID 为 "credentials" 和 class "errors" 的元素, 不是 的元素ID "credentials.errors"。点被解释为 class 选择器的开始。换句话说,它等同于 .errors#credentials
,两个简单的选择器交换了。
document.getElementById()
之所以有效,是因为它只是将字符串作为输入 ID。它不会尝试将其解析为复合选择器。
要使用 ID 选择器正确定位元素,您需要转义圆点:
driver.findElement(By.cssSelector("#credentials\.errors"));
您也可以改用属性选择器,这样您就不必转义任何内容:
driver.findElement(By.cssSelector("[id='credentials.errors']"));
由于您使用 ID 查找元素,因此您可以使用以下内容而不是使用 By.cssSelector:
driver.findElement(By.Id("credentials.errors"));