量角器 – 核心 APIS
量角器 – 核心 APIS
本章让您了解对量角器功能至关重要的各种核心 API。
量角器 API 的重要性
Protractor 为我们提供了广泛的 API,这些 API 非常重要,以便执行以下操作以获取网站的当前状态 –
- 获取我们要测试的网页的 DOM 元素。
- 与 DOM 元素交互。
- 为他们分配行动。
- 向他们分享信息。
要执行上述任务,了解 Protractor API 非常重要。
各种量角器 API
正如我们所知,Protractor 是 Selenium-WebDriver 的包装器,它是 Node.js 的 WebDriver 绑定。量角器具有以下 API –
浏览器
它是 WebDriver 实例的包装器,用于处理浏览器级别的命令,例如导航、页面范围的信息等。例如,browser.get 方法加载页面。
元素
它用于搜索我们正在测试的页面上的 DOM 元素并与之交互。为此,它需要一个参数来定位元素。
定位器(由)
它是元素定位器策略的集合。例如,元素可以通过 CSS 选择器、ID 或它们与 ng-model 绑定的任何其他属性找到。
接下来,我们将详细讨论这些 API 及其功能。
浏览器API
如上所述,它是 WebDriver 实例的包装器,用于处理浏览器级别的命令。它执行以下各种功能 –
功能及其说明
ProtractorBrowser API 的功能如下:
browser.angularAppRoot
浏览器 API 的这个函数为我们将要在其上找到 Angular 的元素设置 CSS 选择器。通常,这个函数在’body’中,但如果是我们的ng-app,它在页面的一个子部分;它也可能是一个子元素。
browser.waitForAngularEnabled
Browser API 的这个功能可以设置为true 或false。顾名思义,如果此函数设置为 false,则 Protractor 将不会等待 Angular $http 和 $timeout 任务完成后再与浏览器交互。我们还可以通过调用 waitForAngularEnabled() 而不传递值来读取当前状态而不更改它。
browser.getProcessedConfig
借助此浏览器 API 功能,我们可以获得当前正在运行的已处理配置对象,包括规范和功能。
browser.forkNewDriverInstance
顾名思义,此函数将派生另一个用于交互式测试的浏览器实例。它可以在启用和禁用控制流的情况下运行。下面给出了两种情况的示例 –
示例 1
在启用控制流的情况下运行browser.forkNewDriverInstance() –
var fork = browser.forkNewDriverInstance(); fork.get(‘page1’);
示例 2
在禁用控制流的情况下运行browser.forkNewDriverInstance() –
var fork = await browser.forkNewDriverInstance().ready; await forked.get(‘page1’);
浏览器重启
顾名思义,它将通过关闭浏览器实例并创建新实例来重新启动浏览器。它还可以在启用和禁用控制流的情况下运行。下面给出了两种情况的示例 –
示例 1 – 在启用控制流的情况下运行browser.restart() –
browser.get(‘page1’); browser.restart(); browser.get(‘page2’);
示例 2 – 在禁用控制流的情况下运行browser.forkNewDriverInstance() –
await browser.get(‘page1’); await browser.restart(); await browser.get(‘page2’);
browser.restartSync
它类似于 browser.restart() 函数。唯一的区别是它直接返回新的浏览器实例,而不是返回解析新浏览器实例的承诺。它只能在启用控制流时运行。
示例– 在启用控制流的情况下运行browser.restartSync() –
browser.get(‘page1’); browser.restartSync(); browser.get(‘page2’);
browser.useAllAngular2AppRoots
顾名思义,它仅与 Angular2 兼容。它将搜索页面上所有可用的 Angular 应用程序,同时查找元素或等待稳定性。
browser.waitForAngular
这个浏览器 API 函数指示 WebDriver 等待,直到 Angular 完成渲染并且在继续之前没有未完成的 $http 或 $timeout 调用。
browser.findElement
顾名思义,这个浏览器 API 函数在搜索元素之前等待 Angular 完成渲染。
browser.isElementPresent
顾名思义,这个浏览器 API 函数将测试元素是否出现在页面上。
browser.addMockModule
每次调用 Protractor.get 方法时,它都会在 Angular 之前添加一个要加载的模块。
例子
browser.addMockModule('modName', function() { angular.module('modName', []).value('foo', 'bar'); });
browser.clearMockModules
与 browser.addMockModule 不同,它将清除已注册的模拟模块列表。
browser.removeMockModule
顾名思义,它将删除一个注册模拟模块。示例: browser.removeMockModule(‘modName’);
browser.getRegisteredMockModules
与 browser.clearMockModule 相对,它将获取已注册的模拟模块列表。
浏览器.get
我们可以使用 browser.get() 将浏览器导航到特定的网址,并在 Angular 加载之前加载该页面的模拟模块。
例子
browser.get(url); browser.get('http://localhost:3000'); // This will navigate to the localhost:3000 and will load mock module if needed
浏览器刷新
顾名思义,这将重新加载当前页面并在 Angular 之前加载模拟模块。
浏览器导航
顾名思义,它用于将导航方法混合回导航对象,以便像以前一样调用它们。示例:driver.navigate().refresh()。
browser.setLocation
它用于使用页面内导航浏览到另一个页面。
例子
browser.get('url/ABC'); browser.setLocation('DEF'); expect(browser.getCurrentUrl()) .toBe('url/DEF');
它将从 ABC 导航到 DEF 页面。
浏览器调试器
顾名思义,这必须与量角器调试一起使用。这个函数基本上是在控制流中添加一个任务来暂停测试并将辅助函数注入浏览器,以便可以在浏览器控制台中完成调试。
浏览器暂停
它用于调试 WebDriver 测试。我们可以在测试中使用browser.pause()从控制流中的那个点进入量角器调试器。
例子
element(by.id('foo')).click(); browser.pause(); // Execution will stop before the next click action. element(by.id('bar')).click();
browser.controlFlowEnabled
它用于确定是否启用控制流。