isElementPresent的简单量角器测试失败,不支持定位器策略

时间:2014-01-20 22:24:42

标签: angularjs mocha protractor

我的测试:

it('should allow login', function() {
  browser.get('index.html');

  $('#username').sendKeys('administrator');
  $('#password').sendKeys('password');
  $('#login').click();

  var logout = $('#logout');
  expect($p.isElementPresent(logout)).to.eventually.be.true;
}); 

但是这出错了:

Error: Unsupported locator strategy: click
  at Error (<anonymous>)
  at Function.webdriver.Locator.createFromObj (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/locators.js:97:9)
  at Function.webdriver.Locator.checkLocator (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/locators.js:111:33)
  at webdriver.WebDriver.findElements (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:805:31)
  at webdriver.WebDriver.isElementPresent (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:787:29)
  at Protractor.isElementPresent (/usr/local/lib/node_modules/protractor/lib/protractor.js:476:22)
  at /Users/pschuegr/wt/client/e2e/login_test.js:26:15

奇怪的是,它指的是isElementPresent行,而不是点击的行。我对webdriver很陌生,如果我错过了一些明显的东西,请道歉。我正在使用mocha框架(这意味着量角器的canary版本),fwiw。

任何想法都赞赏。

4 个答案:

答案 0 :(得分:17)

使用最新的Protractor构建,您可以缩短以上答案:

expect(element(by.css('#logout')).isPresent()).toBeTruthy();

这样您就不必执行browser.wait并减少对isElementPresent的调用次数。

答案 1 :(得分:5)

$('#logout')是一个WebElement。 isElementPresent采用定位器,例如by.css

$('#username').sendKeys('administrator');
$('#password').sendKeys('password');
$('#login').click();

var logout = by.css('#logout');
browser.wait(function() { return $p.isElementPresent(logout); }, 8000);
expect($p.isElementPresent(logout)).toBeTruthy();

答案 2 :(得分:0)

我将采取的最安全的方法在以下代码片段中描述:

it('should return true when element is present', function () {
 var logout;
 logout = $('#logout');

  browser.driver.isElementPresent(logout).then(function (isPresent) {
    isPresent = (isPresent) ? true : browser.wait(function () {
      return browser.driver.isElementPresent(logout );
    }, 15000); //timeout after 15s 
    expect(isPresent).toBeTruthy();
  });
});

上面的代码以承诺检查元素是否存在为止,如果为true,则将其赋值为true,否则等待并继续汇集下一个15秒以查看元素是否存在,并且在这两种情况下我们都是期待它是真的。

答案 3 :(得分:-1)

这应该有效:

var logout = $('#logout');
expect(logout.isPresent()).to.eventually.be.true;