当前位置: 首页 > 面试题库 >

查找WebElement,最佳实践

边桐
2023-03-14
问题内容

在我们当前的自动化中(使用Selenium / WebDriver / Java),我们使用@FindBy 非常 广泛。例如:

@FindBy(css="a[name='bcrumb']")    protected List<WebElement> breadCrumbLinks;
@FindBy(id="skuError")         protected WebElement skuError;  
@FindBy(className="reducedPrice")  protected List<WebElement> reducedPrice;
@FindBy(partialLinkText="Injinji RUN 2.0")  protected WebElement playButton;
@FindBy(linkText="annual member refund")    protected WebElement annualMemberRefund;
@FindBy(xpath="//li[@itemprop='price']")    protected WebElement productPrice;

根据定义,@FindBy可以使用以下内容找到选择器:using,id,名称,className,css,tagName,linkText,partialLinkText和xpath。

最近,我们的前端开发人员提议我们实现一个以’test
=’开头的新属性类。我认为这是一个好主意,因为我们可以仅通过查找文本内容而不是@FindBy固有使用的值来查找WebElement
。我的问题是,这将是更好地 扩大现有功能@FindByOR,创建搜索,我们在我们的测试中使用WebElements的一种新的方式?


问题答案:

首先,没有“最佳实践”,只有在您的特定情况下效果良好的实践。抱歉,那是我的老乡了…

除非您无法使用现有方法,否则我不会花精力在自定义属性上。我更喜欢在可能的情况下使用现有的定位器(查找逻辑)。

尽可能使用ID属性。如果页面是有效的HTML,则ID在页面上是唯一的。它们在每种浏览器中的解析速度都非常快,并且UI可能会发生巨大变化,但是您的脚本仍然可以找到该元素。

有时,ID不是正确的选择。当您使用诸如网格控件之类的东西时,动态生成的ID几乎总是 错误的
选择。您依赖于可能与特定行位置相关联的ID,然后,如果行发生更改,您将一头雾水。

在某些情况下,您的开发人员可以通过将常量值追加或添加到动态生成的ID值来为您提供帮助。ASP.NET
Webforms使用动态生成的值来处理疯狂的事情,因此我多次使用后缀来发挥自己的优势。

当您无法获得稳定,可靠的ID或无法使用ID时,链接文本,名称属性值和CSS选择器(JQuery样式)是不错的第二选择。

在几乎所有情况下,XPath都是我的最后选择。它很慢,可能非常脆弱,并且当它是复杂的XPath时很难处理。就是说,如果您需要在定位器的页面DOM上上下移动,那么这是唯一的选择。

使用现有的FindBy方法之一意味着您将使用一个易于理解的,得到良好支持的定位器策略。当您试图找出一个旧的测试,或者当您加入一个新的团队时,这是一个很大的好处。

那是我的0.02美元。



 类似资料:
  • 问题内容: 我们有一个REST API,客户端可以在其中提供代表Java Enums中服务器上定义的值的参数。 因此,我们可以提供一个描述性错误,我们将此方法添加到每个Enum中。似乎我们只是在复制代码(错误)。有更好的做法吗? 更新 :提供的默认错误消息为。我想提供一个来自API的更具描述性的错误。 问题答案: 可能可以实现通用静态方法。 像这样 那么你就可以 或显式调用实用程序类查找方法。

  • 我们已经看到,较大的页表会导致额外的开销,因为必须将该表分成页面,然后将其存储到主内存中。 我们担心的是执行进程而不是执行页表。 页表为执行过程提供了支持。 页面越大,开销越高。 例如,我们知道 - 将会有100万页这是相当大的数字。 但是,尝试使页面大小更大,例如:2MB。 然后,页表中的页数=(2 X 2 ^ 30)/(2 X 2 ^ 20)= 1K页。 如果比较两种情况,可以知道页面大小与页

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。