如何在量角器页面对象模型中重用函数内部的元素?

How to reuse an element inside of a function in protractor page object model?

我在 windows 10 OS 中将量角器与 Jasmine 一起使用。这是我的堆栈流登录页面。我可以知道如何在 clearme 中访问 txt_username:function()。

pgstackover.js

//pgstackover.js
'use strict';   
module.exports = {  

          txt_username: element(by.id('email')),
          txt_password: element(by.id('password')),
          btn_submit: element(by.id('submit-button')),

          clearme: function() {                 
              txt_username.isDisplayed();  
              txt_username.clear();
              txt_password.clear()  
          } , 

         go: function() {  
                browser.driver.ignoreSynchronization = true;
                browser.waitForAngularEnabled(false);
                browser.driver.manage().window().maximize();
                browser.driver.get('https://whosebug.com/users/login'); //overrides baseURL  
            }

这是我的 spec.js 文件,它一直有效直到 clear me function 失败并出现错误 Failed: txt_username is not defined

var toDoPage = require('../../../../pages/pgstackover.js');  

describe('My first non angular class', function() {

     it('should navigate to stack overflow login page', function() {  
            toDoPage.go();  
          }); 

    it ('My function', function() {
       // browser.driver.get('https://whosebug.com/users/login');
        toDoPage.txt_username.sendKeys('6');
        toDoPage.txt_password.sendKeys('winchester');
        var value=toDoPage.btn_submit.getText();
        expect(value).toEqual("Log in");        

    });

     it('clear me', function() {  
            toDoPage.clearme();  
          });


})  

长话短说,您的代码不知道什么是 txt_username,所以您需要指出来。您的 clearme 函数中缺少 .this

我已经很久没有使用 promise 管理器(因为它已经过时了)所以这里是一个使用 async/await:

的工作示例
  async clearme() {
    await this.txt_username.isDisplayed();
    await this.txt_username.clear();
    await this.txt_password.clear();
  }