为什么选择 JavaScript 作为 UI 测试自动化的语言?

Why to choose JavaScript as a language for UI test automation?

JavaScript UI 自动化框架(例如 Protractor)涉及处理异步执行、承诺、回调、匿名函数等,这对于像 UI 这样的直接任务来说可能有点矫枉过正测试自动化基本上是一个顺序 activity 就像找到一个对象并对其执行操作。

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

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

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

在测试 JavaScript 应用程序时,通常选择 Protractor 或其他基于 JavaScript 的测试框架,因为简单地说,大多数人发现使用更多 JavaScript,就像您通常使用与编码相同的 server-side 语言为 server-side 代码编写单元测试一样。另一方面,如果您 不要 发现这更容易,并且有一些其他您发现更直观的测试方案,您完全可以自己动手并使用您喜欢的任何技术。就这么简单!

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

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

的摘录

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

1.Why 我们应该从 Java-Selenium 移动到 NodeJs-Protractor 吗?

2.Is值得努力吗?

3.What Protractor 提供更多吗?

4.Whats量角器有什么大不了的?

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

这些是 Protractor 相对于 Selenium 的优势

1.Understands Angular life-cycle

Protractor 是由创建 AngularJs 的人制作的,它理解并等待 AngularJs 成为 bootstrapped.These 应用程序有很多 运行 在后台没有浏览器中任何可见的行为变化都会让 Selenium 难以理解,synchronize.Thus 用 selenium 编写的脚本最终会出现笨拙的等待和睡眠。

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

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

2.Provides 附加元素检测技术

Protractor 提供 angular 特定定位器 strategy.They 通过 angular 模型、绑定、ng-options 为 select 元素提供选项 – 并在 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.