我有一个测试套件,我必须必须使用css选择器。
当我通过selenium进行查询时
driver.findElement(By.cssSelector("#credentials.errors"));
OR
if (driver instanceof JavascriptExecutor) {
((JavascriptExecutor) driver).executeScript("document.
getElementById('credentials.errors');");
}
OR
如果我在浏览器csspath查询中手动搜索#credentials.errors
它根本无法定位元素 我可以通过查询
在浏览器控制台中找到该元素document.getElementById('credentials.errors')
我的问题是,如果元素可以通过JavaScript控制台找到,那么为什么不能通过selenium webdriver定位?
答案 0 :(得分:2)
选择器#credentials.errors
查找ID为"凭据"的元素。和一个"错误",不具有ID" credentials.errors"的元素。点被解释为类选择器的开头。换句话说,它相当于.errors#credentials
,两个简单的选择器交换在一起。
document.getElementById()
有效,因为它只需要一个字符串作为输入ID。它不会尝试将其解析为复合选择器。
要使用ID选择器正确定位元素,您需要转义点:
driver.findElement(By.cssSelector("#credentials\\.errors"));
您也可以使用属性选择器,这样您就不必逃避任何事情:
driver.findElement(By.cssSelector("[id='credentials.errors']"));
答案 1 :(得分:0)
也许是Ajax调用后客户端脚本创建的元素,所以你需要等待使用WebDriverWait
答案 2 :(得分:0)
由于您使用ID来查找元素,因此可以使用以下代码而不是使用By.cssSelector:
driver.findElement(By.Id("credentials.errors"));