【问题标题】:Why to choose JavaScript as a language for UI test automation?为什么选择 JavaScript 作为 UI 测试自动化的语言?
【发布时间】:2017-06-05 14:27:54
【问题描述】:

JavaScript UI 自动化框架(如 Protractor)涉及异步执行、承诺、回调、匿名函数等,这对于 UI 测试自动化等直接任务来说可能是过度杀伤力,这基本上是一个顺序活动,如查找对象并执行对其进行操作。

如果我们可以在非基于 JavaScript 的自动化框架中处理 AngularJS/其他前端 Web 应用程序开发 JavaScript 框架页面,那么我们为什么要使用 JavaScript 框架?

或者可以将量角器等框架移植到 ruby​​/python 等语言中,这些语言简单、易读、用户友好,因此更适合 UI 测试自动化?

注意:我并不反对 JavaScript 或其像 Protractor 这样的框架(事实上我已经成功地使用 protractor 为多个大型项目设计了自动化框架),但我想了解选择 JavaScript 作为测试自动化语言的权衡?

【问题讨论】:

  • 好吧,如果您使用 javascript,在大多数情况下,它是一种您已经熟悉的语言。那么为什么要选择像java这样的语言,你可能知道得更糟呢?坚持使用您熟悉和使用的语言。
  • 你的问题非常模糊,你想知道什么?如果你想广泛地测试 AngularJS,Protractor 可以很好地协同工作。您想到了哪些替代方案?
  • 我们实际上有一个单独的测试自动化团队为我们的 Angular 应用程序编写测试。 Protractor 实际上可以用 Java 等其他语言编写。我真的错过了这个问题的重点。
  • Mathias,我想了解我们为什么要使用 JavaScript 作为 UI 测试自动化语言?
  • 如果您的前端或后端是用 Javascript (Node.js) 编写的,我认为为您的测试选择 Javascript 是有意义的。开发人员已经熟悉该语言,并且他们已经在用 Javascript 编写单元测试。因此,为浏览器级别的自动化选择 Javascript 是轻而易举的事。对我来说更有趣的问题是为什么 Protractor 中的每个方法都用 Promise 实现。对于大多数时候需要在页面上定位元素并对其执行某些操作的框架来说,这似乎有点过头了。

标签: javascript protractor automated-tests ui-automation


【解决方案1】:

我在下面解释了一个案例研究Protractor 在测试 AngularJs 应用程序方面优于 Java-Selenium 的优势

但是您可以将此作为通用规则应用,即基于 Javascript 的框架如何比其他框架更好地理解 Angular。这是我blog post on the same的摘录

这回答了测试工程师的永恒问题。

1.为什么要从 Java-Selenium 迁移到 NodeJs-Protractor?

2.值得付出努力吗?

3.Protractor 提供的更多功能是什么?

4.Protractor 有什么大不了的?

5.您是否对代码中的所有等待和休眠感到沮丧?

这些是 Protractor 提供的优于 Selenium 的优势

1.了解 Angular 生命周期

Protractor 是由创建 AngularJs 的人制作的,它理解并等待 AngularJs 被引导。这些应用程序在后台运行很多,而浏览器中没有任何可见的行为变化,这使得 Selenium 难以理解和同步。因此用 selenium 制作的脚本最终会出现笨拙的等待和休眠。

browser.waitForAngular() This 指示 webdriver 等到 Angular 完成渲染并且没有未完成的 $http 或 $timeout 调用后再继续。

请注意,量角器会在每个 WebDriver 操作之前自动应用此命令。

2.提供额外的元素检测技术

Protractor 提供特定角度的定位器策略。它们提供通过角度模型、绑定、ng-options 选择元素以及在 ng-repeat 中查找元素的选项。

应用程序页面上的 HTML 元素:

<pre><code> <div> <span ng-bind="firstName" class="ng-binding">Sachin</span> <br> <span ng-bind="lastName" class="ng-binding">Tendulkar</span>

量角器中的元素位置element(By.binding('user.firstName'))

Selenium 中的元素位置:在 Selenium 中没有唯一的方法来识别这个元素,必须依赖于识别任何唯一的相邻元素并提供相对路径。

Protractor 提供的一些额外的element locator 技术

binding – Find an element by text binding. exactBinding – Find an element by exact binding. model – Find an element by ng-model expression. buttonText – Find a button by text. partialButtonText – Find a button by partial text. repeater – Find elements inside an ng-repeat. exactRepeater – Find an element by exact repeater. cssContainingText – Find elements by CSS which contain a certain string. options – Find an element by ng-options expression. deepCss – Find an element by css selector within the Shadow DOM.

【讨论】:

  • Aditya,如果深入研究这个问题,它不是关于量角器,更多的是关于在基础层面上选择 JavaScript 进行测试自动化......
  • 是的 .. 这回答了具体案例 - Selenium WebDriver - Java Over Protractor-JavaScript .. 您可以将此推断为您的问题.. 这显示了 javascript 解决方案提供的优势,因为他们更好地了解 Angular 跨度>
  • OK...所以 Aditya,不能将量角器移植到 ruby​​ 或 python 之类的语言上吗?我们需要 JavaScript 中固有的东西吗?
  • 不! .. 不是天生的 - 检查这个问题 - stackoverflow.com/questions/29983241/use-protractor-with-java
  • 您可以将量角器的“喜欢”行为模仿为其他语言 - 请参阅amazing post
【解决方案2】:

在测试 JavaScript 应用程序时,通常会选择 Protractor 或其他基于 JavaScript 的测试框架,因为明确地说,大多数人发现使用更多 JavaScript 测试他们的 JavaScript 是最容易的,就像您通常为服务器编写单元测试一样 -使用与您编写代码相同的服务器端语言编写的侧代码。另一方面,如果您发现这更容易并且有一些您认为更直观的其他测试方案,那么您完全允许自己出击并使用您喜欢的任何技术。就这么简单!

【讨论】:

  • 即使对于 JavaScript 应用程序,由于缺乏异步特性,使用 ruby​​ 或 python 等语言编写代码要容易得多。我的观点是异步特性可能对 Web 应用程序开发来说是一个非常有用的特性对于 UI 测试自动化,完全不需要。
  • 这和我说的有矛盾吗?我的观点是,一般来说,人们使用特定框架进行测试是因为他们或选择雇主技术堆栈的人认为它最适合他们的需求。这就是它的全部内容!
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多