<p>根据我的经验,<strong>CSS</strong>是最好的选择,因为它可以简洁,有很好的文档记录,而且web开发人员可能对它有更多的经验和接触。你知道吗</p>
<p><strong>id</strong>、<strong>name</strong>、<strong>tag\u name</strong>和<strong>class\u name</strong>都可以用简单的CSS轻松复制,因此我避免显式使用它们。你知道吗</p>
<p>例如</p>
<p>我的id</p>
<p>姓名</p>
<p>标签名称</p>
<p><strong>班级名称</strong>;<em>。我的班级</em></p>
<p><strong>XPath</strong>的使用经常被人诟病;被标记为缓慢和不稳定。但是我不同意这个观点。你知道吗</p>
<p>当我采访人们时,当他们说他们避免使用Xpath时,我会畏缩,因为Xpath既慢又脆。速度不再是一个问题,xpath只会像编写它的人一样脆弱。但是,我更喜欢CSS选择器的语法,所以对于大多数用例,我会选择XPath。你知道吗</p>
<p>有3种情况下XPath是更好的选择</p>
<ul>
<li><p>多个CSS选择器可以替换为一个XPath查询(例如find element,然后在一个XPath中遍历子元素)</p></li>
<li><p>XPath可以基于文本进行选择,而作为CSS选择器不能</p></li>
<li><p>XPath允许您遍历DOM树,如果您只能通过其子控件标识控件,那么这将非常有用</p></li>
</ul>
<p>如果可能的话,我总是避免按文本选择,但是如果必须的话,我更喜欢使用XPath而不是内置的<strong>链接文本<strong>和<strong>部分链接文本<strong>方法,因为XPath查询允许我更具表现力,允许我选择更多的锚定标记。你知道吗</p>
<p>最后,在使用XPath时有一个问题是“class”被视为一个文本字符串,而不是CSS选择器所支持的类名数组</p>
<pre><code>HTML: <div class="ab cd">
CSS matches: div.ab
CSS matches: div.cd
CSS matches: div.cd.ab
CSS matches: div.ab.cd
XPath matches: //div[@class="ab cd"]
XPath matches: //div[contains(@class, "ab")]
XPath matches: //div[contains(@class, "cd")]
XPath matches: //div[contains(@class, "ab") and contains(@class, "cd")]
XPath DOES NOT match: //div[@class="cd"]
XPath DOES NOT match: //div[@class="ab"]
XPath DOES NOT match: //div[@class="cd ab"]
</code></pre>