在 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 页面的创建方式,有些功能在设计上受到限制,例如 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 开发人员可能对它有更多的经验和接触。
id、name、tag_name和class_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
变化非常快。这不再仅仅是选择定位器的问题。我们需要使用一个定位器,它将:
唯一地标识一个元素。
必须优化定位器的性能。
牢记这两个因素,最好的策略是模拟 DOM。W3C Recommendation Candidate
确实提到了以下定位器列表:
因此判决结果清晰、简洁。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件