Selenium无法在浏览器DOM中定位元素

时间:2015-04-03 11:11:05

标签: javascript selenium selenium-webdriver css-selectors

我有一个测试套件,我必须必须使用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定位?

3 个答案:

答案 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"));