Selenium 如何编写CSS选择器来选择没有特定属性的元素?
如何编写CSS选择器来选择没有特定属性的元素 我有两个Selenium 如何编写CSS选择器来选择没有特定属性的元素?,selenium,selenium-webdriver,css-selectors,webdriver,Selenium,Selenium Webdriver,Css Selectors,Webdriver,如何编写CSS选择器来选择没有特定属性的元素 我有两个节点,如下所示: 第一: <div class="weEq5" style="will-change; width;"> <button class="_35EW6"> 我正在寻找一个等效的CSS选择器 审判: div[class :not(style)]>button (doesn't works). 我已经完成了以下讨论,但他们似乎放弃了class属性,如:而不是([class]),如中所示:
节点,如下所示:
- 第一:
我正在寻找一个等效的CSS选择器 审判:<div class="weEq5" style="will-change; width;"> <button class="_35EW6">
我已经完成了以下讨论,但他们似乎放弃了class属性,如div[class :not(style)]>button (doesn't works).
,如中所示::而不是([class])
我在类似的行中查找以
结尾的内容。通常,您会编写:not(attribute)
来匹配一个没有:not([style])
属性的元素,正如前面所描述的那样,它强调按顺序使用style
和()
括号[]
但是,如果Selenium WebDriver中没有这种功能,更糟糕的是,如果
的工作方式与我所期望的:not(style)
完全相同,那么这就是它的CSS选择器解析器的一个缺陷,因为:not([style])
实际上意味着“不是:not(style)
元素”,这使得style
冗余元素只能是div:not(style)
或div
样式,但不能同时是两者。除非您绝对需要选择器,否则我强烈建议您使用XPath定位器策略,而不是依赖Selenium WebDriver的CSS选择器引擎中的这种怪癖,这种怪癖迫使您编写的选择器既不正确,也不适用于接受选择器的其他任何地方。我认为更准确的CSS选择器是:
因为div[class]:not([style])>button
元素是按钮
元素的子元素div
希望它能帮助你 这就是您要查找的代码:
现在让我们把它分解一下。 在本例中,我们有四个选择器:div:not([style]) button{ background-color: red; }
- div和button-这些选择html元素。例如,我们可以将其替换为类选择器,如
.weEq5
- :not()-表示我们想要括号内不符合选择器条件的所有内容
- [style]-一种非常强大的。我们可以将任何其他css选择器(如html标记名(按钮或div)、类名或ID)放置在内部
的组合意味着我们需要所有没有样式属性的div。之后,我们有一个空格和一个按钮,这意味着我们需要上面选择器中的所有按钮div:not([style])
在按钮div:not([style])>按钮之前添加
将只选择作为所选div直接子级的按钮元素。它将从div内部更深的选择按钮中排除。,页面的结构要求CSS规则知道文档本身是否存在“style=…”。甚至为什么风格=。。。正在使用 样式属性现在是老式的,我相信是CSS之前的。它还优先于CSS中的任何内容。该属性不接受CSS类名。它只接受本机html样式的属性,如“宽度”、“高度”、“字体”-老派的东西-最终这些都是你的CSS解决的问题,不管它通过框架有多花哨或模糊:字体、宽度、左、上、浮动。。等等 通过使用文档中的class属性(而不是样式),您可以无限控制在CSS中编写智能选择器
例如,如果需要,可以在div的class属性中放置3个类,如果其中2个类存在,则让选择器对其应用样式,但如果所有3个类都存在,则不能应用样式。大量的灵活性,根本不需要在文档中重写或使用“style=…” 您已经有了答案-只需在示例中“类”出现的位置替换为“样式”。@BoltClock已尝试,但未在模板中得到解决。我正在使用div:not([style])按钮或
@BoltClockdiv[class]:not([style])按钮来解决此问题。
似乎工作得很好。@DebanjanB,你说得对。关于排除div[class]:not(style)按钮
属性的问题style
这将定位第二个按钮。你可以利用周围的其他元素使它变得强大。利基思想确实如此。你能帮我理解你用过的这个短语吗?一个元素只能是div:not([style])按钮
或div
本身也是一个标记,这不是我们正在处理的当前用例。style属性是post-CSS。它的语法来自CSS,而不是相反。您列出的“原生html样式属性”不是您所想到的老式表示属性,而是现代(相对而言)CSS属性,它们与其他级联样式表参与相同的级联。事实上,这些天来,呈现属性是使用CSS实现的,尽管我不确定当1996/97年第一批支持CSS的浏览器出现时,它是否以另一种方式实现过。总之,这里的用例不是使用CSS设计元素的样式,从标签中可以看出,这是一个使用SeleniumWebDriver的自动化测试用例,它不涉及应用或重写CSS。样式,但不能同时是两者。。。因为当我浏览示例时,它是基于
的,即带有style属性的
标记。@DebanjanB:标记名是
。div
的意思是“标记名不是:not(style)
”。由于style
是div
,div
对该元素始终为真,就像:not(style)
或:not(p)
对该元素为真一样。这与样式属性无关。谢谢。它现在被清除了<代码>:not(span)
div[class]:not([style])>button
div:not([style]) button{ background-color: red; }
- div和button-这些选择html元素。例如,我们可以将其替换为类选择器,如