在 Selenium 中的众多 findElement(s)/By 函数中,何时会使用其中一个?

2024-11-15 08:36:00
admin
原创
17
摘要:问题描述:Selenium 包含 findElement 函数,像这样......查找元素id link_text partial_link_text name class_name tag_name css_selector xpath 显然,由于 HTML 页面的创建方式,有些功能在设计上受到限制,例如 ...

问题描述:

Selenium 包含 findElement 函数,像这样......

查找元素

id
link_text
partial_link_text
name
class_name
tag_name
css_selector
xpath

显然,由于 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 有什么好处吗?


解决方案 1:

根据我的经验,CSS是首选的选择器,因为它简洁、有据可查,而且 Web 开发人员可能对它有更多的经验和接触。

idnametag_nameclass_name都可以用简单的 CSS 轻松复制,所以我会避免明确使用它们。

例如

编号#我的编号

名称[name="我的名字"]

标签名称我的标签

班级名称.我的班级

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"]

解决方案 2:

这个问题已在多个论坛中以不同的形式被提出和回答。如果我们按定位器的优先顺序考虑所有这些问题,则列表将如下:

  • id:选择具有指定属性的元素id

  • 名称:选择具有指定name属性的第一个元素。

  • link_text :选择包含与指定匹配的文本的链接(锚标签)元素LinkText

  • partial_link_text :选择包含与指定匹配的文本的链接(锚标签)元素PartialLinkText

  • tag_name:使用 定位元素Tag Name

  • class_name:使用 定位元素ClassName

  • css_selector:使用选择元素CssSelectors

  • xpath:使用表达式定位元素XPath

所以现在的问题是“有什么新鲜事”

答案是Selenium 最近有了很大的发展WebDriver现在是W3C Recommendation Candidate。其中的事情Selenium变化非常快。这不再仅仅是选择定位器的问题。我们需要使用一个定位器,它将:

  • 唯一地标识一个元素

  • 必须优化定位器的性能。

牢记这两个因素,最好的策略是模拟 DOMW3C Recommendation Candidate确实提到了以下定位器列表:

Selenium_Locators

因此判决结果清晰、简洁。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用