Open In App

How to use protractor to wait for the element’s attribute to change to a particular value ?

Improve
Improve
Like Article
Like
Save
Share
Report

Introduction: Protractor is an end-to-end test framework developed for AngularJS applications, however, it also works for non-Angular JS applications. It runs tests against the application interacting with it as a real user would, running in a real browser. In this article, we are going to use Protractor to check how we can wait for the element’s attribute to change to a particular value?

Prerequisite: Installation and Setup of Protractor

Approach: We are going to create a basic test program in which we are going to check how we can wait for the element’s attribute to change to a particular value? All the Protractor tests will have a file that will contain the configuration and this will be the initial file that will initiate the test.

Below is the step-by-step implementation of the above approach.

Step 1: We have to first create a conf.js file consists of the configuration to be used with Protractor.

Javascript




exports.config = {
  // Define the capabilities to be passed
  // to the webdriver instance
  capabilities: {
    browserName: "chrome",
  },
  
  // Define the framework to be use
  framework: "jasmine",
  
  // Define the Spec patterns. This is relative
  // to the current working directory when
  // protractor is called
  specs: ["test.js"],
  
  SELENIUM_PROMISE_MANAGER: false,
  
  // Define the options to be used with Jasmine
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000,
  },
  
  // Define the baseUrl for the file
  baseUrl: "file://" + __dirname + "/",
  
  onPrepare: function () {
    browser.resetUrl = "file://";
  },
};


Step 2: We will create the HTML file called test.html which will create a new tab.

Javascript




<!DOCTYPE html>
<html>
  
<body>
    <input type="text" id="text" name="name" 
        placeholder="Enter your Name" required>
  
    <script>
        setTimeout(() => {
            document.getElementsByName('name')[0]
                .placeholder = 'Test text change';
        }, 5000)
    </script>
</body>
  
</html>


Step 3: We will create the test.js file. In this file, we are going to access the above HTML file and then going to wait for the element’s attribute to change to a particular value. The browser is a global created by Protractor, which is used for browser-level commands such as navigation with browser.get() method. The describe and it syntax is from the Jasmine framework where describe is a description of your test while it defines the steps for the test.

Javascript




describe('Protractor Demo App', function () {
    it("should wait for attribute's value to change to a particular value",
         async function () {
        
        var EC = protractor.ExpectedConditions;
        // Disable waiting for Angular render update
        await browser.waitForAngularEnabled(false)
    
        // Get the HTML file that has to be tested
        await browser.get('test.html');
           
        // Get the test Element
        var testElement = element(by.id('text'));
  
        // Waits for the attribute's value to change
        // to a particular value
        await browser.wait(async function() {
            return await testElement.getAttribute('placeholder') ===
            'Test text change';}, 10000, 'Takes time to load');
    });
});


Step 4: Finally, we will run the configuration file using the command given below. This will run the configuration file and the test will be run as shown in the output below.

protractor conf.js

Output:



Last Updated : 22 Oct, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads