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

psc*_*egr 6 mocha.js angularjs 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;
}); 
Run Code Online (Sandbox Code Playgroud)

但这错误:

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
Run Code Online (Sandbox Code Playgroud)

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

任何想法都赞赏.

Cod*_*own 17

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

expect(element(by.css('#logout')).isPresent()).toBeTruthy();
Run Code Online (Sandbox Code Playgroud)

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

  • 等待在哪里发生,为什么?我不明白为什么你的任何改变会使`browser.wait`调用不必要,所以我假设在量角器中有一个改变,这使得这可能没有明确的等待?如果是这样,那会有什么变化? (2认同)
  • @MarkAmery量角器在其所有函数中使用promises,并在解析之前等待$ http请求完成(如果有的话).因此,在这里得到答案,期望将1)获得元素2)当它被解决时,它将检查元素是否存在3)当解决时,将触发对真实结果的期望.等待发生在引擎盖下,您不需要手动等待,步骤1,2和3中的每个承诺将根据需要等待每个承诺得到解决. (2认同)

小智 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();
Run Code Online (Sandbox Code Playgroud)