【问题标题】:How to name WebElements like div, b, span in Selenium?如何在 Selenium 中命名 div、b、span 等 WebElement?
【发布时间】:2021-12-24 08:40:49
【问题描述】:
例如,我将框架和下拉列表命名为somethingFrame、somethingDropDown。但是<div>、<b>、<span> 等呢?
有没有这方面的标准(somethingBold,somethingSpan)?
或者最好保持原样(只是something)?
@FindBy(xpath = "//b[contains(text(), 'Something')]")
private WebElement something?;
【问题讨论】:
标签:
java
selenium
selenium-webdriver
naming-conventions
【解决方案1】:
根据wikipedia:
命名约定是一组选择字符的规则
序列用于表示变量、类型、
函数,以及源代码和文档中的其他实体。
使用命名约定的原因(而不是允许
程序员选择任何字符序列)包括以下内容:
- 减少阅读和理解源代码所需的工作量。
- 使代码审查能够关注比语法和命名标准更重要的问题。
- 使代码质量审查工具能够将报告重点主要放在语法和样式偏好以外的重大问题上。
从顶层来看,Python 和 Java 中采用了两种不同的命名约定。
这个用例
根据您的用例,要以粗体命名登录的用户名,您可以使用以下内容:
@FindBy(xpath = "//b[contains(text(), 'scode')]")
private WebElement loggedUserHomepageBoldName;
要命名用户名上方的标签,您可以使用以下内容:
@FindBy(xpath = "//b[contains(text(), 'scode')]//preceding::label[1]")
private WebElement loggedUserHomepageNameLabel;
【解决方案2】:
我通常使用与其他 web 元素相同的约定,它和标签本身的一些独特之处。如果我的目标是包含类似用户名的跨度,我会使用:
@FindBy(xpath = "//span[@data-testid='loginUsernameLabel']")
private WebElement loginUsernameLabelSpan
对于锚标记之类的东西,我会使用链接而不是 b.c。它比锚更广为人知,但这只是偏好问题。
@FindBy(xpath = "//a[@data-testid='loginLink']")
private WebElement loginLink
如果您与一个团队或一组 QA 一起工作,请一起讨论。选择一个约定并坚持下去。我曾为命名约定非常松散的公司工作,当新人试图通读代码并实施他们没有亲自帮助为其创建 POM 的测试时,这可能会导致代码重复和普遍混乱。