无法在selenium webdriver中找到::之前的css选择器元素

时间:2014-06-18 14:34:35

标签: c# selenium-webdriver css-selectors

我想测试复选框已选中或未选中状态。

这是复选框选中的html代码

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

::before是css选择器。

当我将鼠标悬停在复选框时,它会将我们的元素显示为span.check::before

但是

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

抛出元素未找到异常。

任何帮助都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

对于我来说,我已经从CSS选择器中删除了伪元素ptr,如下所示,并且可以正常工作

代替:

::before

我给了:

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

实际上不应该像上述herehere那样在选择器中使用伪元素。

答案 1 :(得分:0)

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

我已经使用了鼠标移动,然后等待显示修改后的css / class的元素。鼠标将移动并悬停到第一个元素,然后等待第二个元素出现在屏幕上。这类似于click,然后等待元素出现。

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

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

你也可以这样做

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

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

答案 2 :(得分:0)

我遇到了与伪css选择器类似的问题(::之前相似),我已经使用&#34; Actions&#34;克服了这个问题。硒类。

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

希望它有所帮助。

谢谢, 萨姆帕斯