我的测试:
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。
任何想法都赞赏。
答案 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;