在 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
Ghostdriver 1.2.1 + PhantomJS 2.0 + 最新的 Selenium 在 Java 中找不到变量错误