量角器 - 存在但不可见的字段 - 元素当前不可交互,也可能无法操作

时间:2015-10-17 09:16:50

标签: javascript angularjs automation jasmine protractor

我刚刚开始使用Protractor。

这是我的问题:

我想登录网站。页面加载时,它会在显示“用户名”和“密码”字段之前显示旋转加载轮,并显示“登录”按钮。 我的问题是,clear()sendKeys()的任何尝试都会失败,因为屏幕上尚未显示字段,并且量角器正在尝试与它们进行交互。

  

InvalidElementStateError:元素状态无效:元素不是   目前可互动,可能无法操纵。

我注意到的是,在页面源中,旋转轮最初有class='ngscope',一段时间后它变为class='ng-scope ng-hide'

整个事情就是这样:

<div ng-show="Model.Busy" class="ng-scope ng-hide">
    <div ng-class="{'control--inline': small, 'div-centre': !small}" class="div-centre">
    <img ng-src="/assets/img/loading.gif" ng-class="{'very-small-loading': small}" src="/assets/img/loading.gif">
</div>
</div>

我正在使用的代码是:

describe('Testing', function() {
    browser.driver.manage().window().maximize();

  var username = element(by.model('Model.Username'));
  var password = element(by.model('Model.Password'));
  var loginbutton = element(by.css('[ng-click="Model.Logon()"]'));


  beforeEach(function() {
    browser.get('MY WEBSITE');
  });

  it('should log me in', function() {

//  expect($('[ng-show=Model.Busy].ng-hide').isDisplayed()).toBeTruthy();  <-- this fails


    username.clear();
    password.clear()

    username.sendKeys('1');
    password.sendKeys('2');

    loginbutton.click();

  });
});

如何使这项工作?

1 个答案:

答案 0 :(得分:3)

您必须等到加载动画隐藏,然后尝试使用量角器的内置charindex功能处理页面上显示的元素。一种方法是等待元素显示使用presenceOf()功能。这是如何 -

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7

希望它有所帮助。