Mat*_*t I 1 python selenium css-selectors python-3.x selenium-webdriver
Selenium 包含 findElement 函数,就像这样......
.find_element_by_
id
link_text
partial_link_text
name
class_name
tag_name
css_selector
xpath
Run Code Online (Sandbox Code Playgroud)
显然,由于 HTML 页面的创建方式,有些标签受到设计的限制,例如 id、link_text、name、tag_name,因为并非所有标签都可能包含 id、link_text 等...但是,css_selector 和 xpath 可以做到几乎它们可以做的所有事情,然后还有一些,但它们可以交互的内容似乎受到限制。例如,某些按钮可能无法通过 xpath 单击,但可以通过 css_selector 单击。
所以我想知道,什么时候人们会想使用其中之一(特别是 xpath 或 css_selector)?
其他函数(id、link_text 等)几乎没有用,因为(至少)我发现 xpath/css_selector 也可以做到这一点?
相比 xpath/css_selector 使用 link_text 有什么好处吗?
根据我的经验,CSS是更好的选择器,因为它简洁,文档齐全,并且 Web 开发人员可能有更多的经验和接触它。
id、name、tag_name和class_name都可以使用简单的 CSS 轻松复制,因此我会避免显式使用它们。
例如
ID ; #我的身份
姓名; [名称=“我的名字”]
标签名; 我的标签
班级名称; 。我的课
XPath的使用常常受到很多诟病。被标记为缓慢且不稳定。不过我不同意这个观点。
当我采访一些人时,当他们说他们避免使用 Xpath 因为它又慢又脆弱时,我会感到畏缩。速度不再是问题,xpath 的脆弱程度取决于编写它的人。然而,我更喜欢 CSS 选择器的语法,这就是为什么我会在大多数用例中选择 XPath。
在 3 种情况下,XPath 是更好的选择;
多个 CSS 选择器可以替换为一个 XPath 查询(例如,可以在一个 XPath 中执行查找元素然后迭代子元素)
XPath 可以基于文本进行选择,而 CSS 选择器则不能
XPath 允许您遍历 DOM 树,如果您只能通过其子控件来识别控件,这将非常有用
如果可能的话,我总是会避免通过文本进行选择,但如果必须的话,我更愿意使用 XPath 而不是内置的链接文本和部分链接文本方法,因为 Xpath 查询将允许我更具表现力并允许我选择更多不仅仅是锚标签。
最后,使用 XPath 时遇到的一个问题是“class”被视为文字字符串,而不是 CSS 选择器支持的类名数组;
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"]
Run Code Online (Sandbox Code Playgroud)
这个问题已经在许多论坛上以不同的形式被提出和回答。考虑到所有这些,如果我们优先考虑定位器,列表将如下:
id属性的元素。name属性的第一个元素。LinkText。PartialLinkText。Tag Name。ClassName.CssSelectors。XPath。所以现在的问题是有什么新鲜事?
答案是Selenium 最近已经发展了很多。WebDriver现在是一个W3C Recommendation Candidate. 里面的事情Selenium变化得很快。这不再仅仅是选择定位器的问题。我们需要使用一个定位器,它将:
牢记这两个因素,最好的策略是Mock DOM。该W3C Recommendation Candidate确实提到了定位器列表,如下所示:
因此,判决是清晰、简洁的。
| 归档时间: |
|
| 查看次数: |
4879 次 |
| 最近记录: |