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