当前位置: 首页 > 知识库问答 >
问题:

如何确定一个元素是否被CSS选择器匹配?

姚丰羽
2023-03-14
var links = _driver.FindElements(By.CssSelector("a"));
foreach (var link in links) 
{
  if (link.Is(".myclass[myattr='myvalue']"))
    // ... do something
  else 
    // ... do some other thing
}

共有1个答案

钮鸿煊
2023-03-14

没有Selenium方法可以执行与jQuery的$(...).is(...)等价的操作。但是,DOM提供匹配。它不是$(...).is(...)的完全替换,因为它不支持jQuery对CSS选择器语法的扩展,但是Selenium也不支持这些扩展。

您可以通过将要测试的元素传递给JavaScript脚本来使用它,该脚本将传递给executescript。该元素将作为脚本中参数的第一个元素出现。只需对其调用matches并返回值。我不使用C#,但根据文档,我相信在C#中应该是这样的:

bool isIt = (bool)(driver as IJavaScriptExecutor).ExecuteScript(
    "return arguments[0].matches(\".myclass[myattr='myvalue']\")", element);

isit包含测试结果。element是您要测试的元素,driver是您已经创建的驱动程序。有关兼容性,请参见caniuse。在我的应用程序中,我使用polyfill在我关心的所有平台上提供匹配

 类似资料:
  • 问题内容: 在以下HTML中,我想在图像悬停时将悬停效果应用于标题。是否有CSS选择器可以执行此操作? 的HTML 问题答案: 更新:主题说明符似乎已从Selectors Level 4规范的 编辑者草案(2014年5月6日)中 删除。这样就无法使用CSS来实现这一目标。 选择器级别4引入了主题说明符,该说明符允许: 选择。 当前不存在浏览器支持AFAIK。 您可以在JavaScript中对其进行

  • 本文向大家介绍浏览器是怎样判断元素是否和某个CSS选择器匹配?相关面试题,主要包含被问及浏览器是怎样判断元素是否和某个CSS选择器匹配?时的应答技巧和注意事项,需要的朋友参考一下 先产生一个元素集合,然后从后往前判断; 浏览器先产生一个元素集合,这个集合往往由最后一个部分的索引产生(如果没有索引就是所有元素的集合)。然后向上匹配,如果不符合上一个部分,就把元素从集合中删除,直到真个选择器都匹配完,

  • 问题内容: 我试图在ID或类’B’的元素中选择类’A’的第一个元素。我尝试了> +和第一个子选择器的组合,因为它不是类元素’B’中的第一个元素。它起作用了,但是…我试图覆盖一些默认的CSS,并且我无法控制服务器端,似乎类’A’元素有时在不同的位置生成。这是一个例子: 有时,“ B”类的名称有所不同,“ A”之前的元素也有所不同。那么,有什么方法可以选择元素“ C”中首次出现的“ A”吗?因为“ C

  • 我试着练习用CSS选择器获取值,我想出了这个(不像预期的那样工作) (我也尝试过) 我对的期望:第三个没有id属性和data-ad-show属性的元素被选中,其值将是所需的值3。

  • 问题内容: 我正在尝试使用SeleniumRC测试我的GWT应用程序,并试图使用CSS选择器来匹配元素。 我想计算以下HTML中已启用按钮的数量。 如果是下一个按钮被启用用和禁用,如果它是下用。 因此,基本上,我想用class 检索all下的按钮数量。 问题答案: 据我所知,您不能使用CSS选择器来执行此操作,但是Selenium中有一个命令可以通过XPath进行计数。以下命令将验证有两个禁用的按

  • 问题内容: 我有一堆带有类名的元素,但是我似乎无法使用以下CSS规则选择第一个元素: 该选择器有什么问题,我该如何纠正? 多亏了这些评论,我才知道该元素必须是其父元素的第一个子元素才能被选中,而事实并非如此。我具有以下结构,并且该规则失败,如注释中所述: 我该如何针对上课的第一个孩子? 问题答案: 这是作者误解工作方式的最著名例子之一。在CSS2介绍,该伪类表示其父的第一个孩子。而已。有一个非常普