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