如何使用 Protractor 检查文本是否存在于元素中?
我们将学习如何使用 Protractor 检查文本是否存在于元素中。Protractor 是一个用于 Angular 和 AngularJS 应用程序的端到端测试框架。它使用 WebDriverJS 并运行用 Jasmine 或 Mocha 编写的测试,从而可以对 Web 应用程序进行自动化浏览器测试。Protractor 可以模拟用户与应用程序的交互,测试预期的行为并报告测试结果。它还包含一些专为 Angular 设计的功能,例如能够在执行测试之前等待 Angular 特定元素加载。
注意 - 要使用 Protractor,请确保已完成 Protractor 的安装和设置。用户可能需要将执行策略设置为“RemoteSigned”
或者如果在不执行此操作的情况下无法工作,则设置为“Unrestricted”。
命令
Set-ExecutionPolicy RemoteSigned Or Set-ExecutionPolicy Unrestricted
我们将看到两种不同的场景来检查文本是否存在于元素中。
按钮中的文本
淡入元素中的文本
按钮中的文本
使用 Protractor,我们可以检查按钮中是否存在任何文本内容。
语法
用户可以按照以下语法来检查文本是否存在于元素中。
// Wait for the button to be present browser.wait(EC.presenceOf(button), 5000); // Check if the text content is as expected expect(button.getText()).toEqual('Click me');
它将等待按钮出现,然后检查按钮中是否存在文本。
示例
在以下示例中,我们创建了 3 个文件 - conf.js、test.html 和 test.js。
我们在 conf 文件夹中有一个 conf.js 文件,tests 文件夹包含 test.html 和 test.js。
conf.js
此文件是 Protractor 的配置文件。它将浏览器功能设置为 Chrome,指定 Jasmine 框架,并指定测试脚本文件的位置。它还设置了默认超时间隔和测试的基本 URL。onPrepare 函数用于设置浏览器的重置 URL。
exports.config = { directConnect: true, // Capabilities to be passed to the webdriver instance. capabilities: { 'browserName': 'chrome' }, // Framework to use. Jasmine is recommended. framework: 'jasmine', /* Spec patterns are relative to the current working directory when protractor is called */ specs: ['../tests/test.js'], // Options to be passed to Jasmine. jasmineNodeOpts: { defaultTimeoutInterval: 30000 }, // Define the baseUrl for the file baseUrl: "file://" + __dirname + "/", onPrepare: function () { browser.resetUrl = "file://"; } };
test.html
此文件包含一个带有“Click me”文本的按钮。
<html> <head> </head> <body> <h2>Check whether text is present in button</h2> <button id = "myButton" > Click me </button> </body> </html>
test.js
test.js 文件检查网页上是否存在带有特定文本的按钮。我们禁用等待 Angular 渲染更新,因为它可能不是 Angular 应用程序。然后我们使用 button.getText() 方法检查按钮是否包含文本“Click me”,并使用 expect() 方法将其与预期值进行比较。
describe('Protractor Demo App', function() { it( 'should have a button with specific text' , async function() { // Disable waiting for Angular render update browser.waitForAngularEnabled( false ); // Get the HTML file that has to be tested browser.get('../tests/test.html'); let EC = protractor.ExpectedConditions; // Wait for the button to be present let button = element(by.buttonText( 'Click me' )); browser.wait(EC.presenceOf(button), 5000); // Verify the button text expect(button.getText()).toEqual( 'Click me' ); }); });
运行配置文件的命令
protractor conf.js(file path)
输出
我们可以看到所有测试都通过了,并且没有错误。
淡入元素中的文本
当我们有一个使用 CSS transition 属性淡入的元素时。使用 Protractor,我们可以检查该元素中是否存在文本。
示例
我们采取了另一个示例。conf.js 文件将保持不变。测试脚本等待具有 ID“fade-in”的特定 HTML 元素可见,检索其文本内容,并检查它是否与预期文本匹配。HTML 文件包含 CSS 样式和一个 JavaScript 函数,该函数在一段时间内淡入元素的文本。
test.html
HTML 文件包含一个隐藏的文本元素,该元素在页面加载时使用 JavaScript 淡入。
<html> <head> <style> #fade-in { opacity: 0; transition: opacity 0.5s ease-in-out; } </style> <script type="text/javascript"> let opacity = 0; let intervalID = 0; window.onload = fadeIn; function fadeIn() { setInterval(show, 200); } function show() { let element = document.getElementById("fade-in"); opacity = Number(window.getComputedStyle(element) .getPropertyValue("opacity")); if (opacity < 1) { opacity = opacity + 0.1; element.style.opacity = opacity } else { clearInterval(intervalID); } } </script> </head> <body> <h2>Check whether text is present in an element</h2> <p id = "fade-in" > This text fades in </p> </body> </html>
test.js
这是我们的 test.js 文件。它等待元素可见,检索其文本内容,并检查它是否与预期文本“This text fades in”匹配。它还禁用等待 Angular 渲染更新并导航到要测试的 HTML 文件。
describe('Protractor Demo App', function() { it('should have faded in', function() { // Disable waiting for Angular render update browser.waitForAngularEnabled(false); // Navigate to the HTML file that has to be tested browser.get('../tests/test.html'); // Get the element that fades in let fadeInElement = element(by.id('fade-in')); // Wait for the element to become visible browser.wait(function() { return fadeInElement.isDisplayed().then(function(isDisplayed) { return isDisplayed; }); }, 5000); // Get the text content of the fading-in element let fadeInText = fadeInElement.getText(); // Check if the text content is as expected expect(fadeInText).toEqual('This text fades in'); }); });
输出
我们已经学习了如何检查元素中是否存在任何文本内容。在第一个示例中,我们检查了按钮中是否存在文本。然后,在另一个示例中,我们在淡入元素中获取了文本。在这两种情况下,我们都可以检查这些元素中文本的可用性。