在 selenium webdriver 中找不到 ::before css 选择器元素

Posted

技术标签:

【中文标题】在 selenium webdriver 中找不到 ::before css 选择器元素【英文标题】:Unable to find ::before css selector element in selenium webdriver 【发布时间】:2014-08-08 21:57:14 【问题描述】:

我想测试复选框选中或未选中的条件。

这是勾选复选框的html代码

<div classs="input-control checkbox">
<span class="check">
::before
</span>
</div>

::before 是 CSS 选择器。

当我将鼠标悬停在复选框上时,它会将 webelement 显示为span.check::before

但是

driver.FindElement(By.CssSelector("span.check::before"));

抛出元素未找到异常。

我们将不胜感激。

【问题讨论】:

你说你有一个::before 伪元素但你的选择器说::after...? (我不确定你是否能找到伪元素。) 为什么还需要定位伪元素? div.checkbox::after 不是 span.check::before。每个元素都可以有单独的::before::after 伪元素。 【参考方案1】:

我不确定您的确切 html,因为评论中提到您的示例 html 中没有 ::after。根据您的描述,这似乎与以下类似,但不确定您的确切情况是否如此。

我已经利用鼠标移动,然后等待显示修改后的 css/class 的元素。鼠标将移动并悬停在第一个元素上,然后等待第二个元素出现在屏幕上。这同样适用于单击然后等待元素出现。

悬停代码示例 - 需要与您的代码语言和结构相匹配...

[Actions Instance goes here].MoveToElement([IWebElementGoesHere]).Perform();

你也可以这样做

[Actions Instance].Click([IWebElementGoesHere]).Perform();

此库的参考:https://code.google.com/p/selenium/wiki/AdvancedUserInteractions

【讨论】:

谢谢大家。是的,这是我这边的拼写错误。我在 findElement 语句中输入了错误的 webelement。它应该是 driver.FindElement(By.CssSelector("span.check::before")); 另外,我发现 selenium css 选择器不支持伪元素。在上述情况下,chrome 生成 ::before 伪元素,而 firefox 根本不会更改 DOM。没有创建伪元素。【参考方案2】:

我在使用伪 css 选择器(::before alike)时遇到过类似的问题,我已经使用 selenium java 的“Actions”类克服了这个问题。

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("button[id$='save-button']"))).build().perform();

希望对你有帮助。

谢谢, 山路

【讨论】:

第二行代码是否真的选择了::before 元素?【参考方案3】:

在我的例子中,我已经从 CSS 选择器中删除了伪元素 ::before,如下所示,它可以工作

代替:

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("span.check::before"))).build().perform();

我给了:

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("span.check"))).build().perform();

在选择器中使用伪元素实际上不应该像 here 和 here 提到的那样工作。

【讨论】:

以上是关于在 selenium webdriver 中找不到 ::before css 选择器元素的主要内容,如果未能解决你的问题,请参考以下文章

在页面中找不到控件,但仅在通过 selenium-server 运行时

Selenium,webdriver - 找不到 - xpath / css_selector / ... python

selenium webdriver怎么定位td里面的元素

Ghostdriver 1.2.1 + PhantomJS 2.0 + 最新的 Selenium 在 Java 中找不到变量错误

Selenium WebDriver定位不到元素的原因及解决办法

selenium webdriver定位不到元素的五种原因及解决办法