大家好我正在研究量角器来测试一个非角质的网站。最初在测试时我有browser.sleep()
,以便页面完全加载。我知道添加browser.sleep不是一种好的测试方法,因此希望将其从代码中删除。
我尝试了browser.wait,但是我收到错误,当我添加broswer.manage.timeouts.implicitwait()时,等待不会发生。我长期坚持这个问题请帮助我:(
var co = require('co');
var path = require('path');
describe("Portal: Partner Admin ", function () {
beforeEach(function () {
browser.ignoreSynchronization = true;
});
it("test", co.wrap(function* () {
yield browser.get(browser.params.baseUrl);
var elmOK = browser.driver.findElement(by.css('a[href="#login"]'));
yield elmOK.click();
expect(browser.getCurrentUrl()).toContain("login");
yield browser.switchTo().frame('here-account-sdk').then(function () {
browser.driver.findElement(by.id('sign-in-email')).sendKeys("Userid");
browser.driver.findElement(by.id('sign-in-password-encrypted')).sendKeys("password");
browser.driver.findElement(by.xpath(' //*[@id="sign-in-form"]/div[2]/div[6]/form/fieldset[3]/button')).click();
});
browser.sleep(5000);
var elmOK = browser.driver.findElement(by.xpath('//*[@id="lnav"]/li[3]/a'));
yield elmOK.click();
browser.sleep(1500);
browser.driver.findElement(by.xpath('//*[@id="administration"]/div/div[1]/select/option[2]')).click();
browser.sleep(5000);
browser.driver.findElement(by.xpath('//*[@id="administration"]/div/div[2]/table/tbody/tr[1]/td[10]/span')).click();
browser.sleep(5000);
browser.driver.findElement(by.xpath('//*[@id="content"]/div/div[2]/div/div/div/div[3]/button[1]')).click();//Delete the file
browser.sleep(5000);
}));
答案 0 :(得分:3)
您可以使用量角器预期条件。
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
browser.wait(EC.elementToBeClickable($('#abc')), 5000);
像
var webElement = browser.driver.findElement(by.xpath('//*[@id="administration"]/div/div[1]/select/option[2]'));
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
browser.wait(EC.elementToBeClickable(webElement )), 5000, 'element is not clickable with 5 seconds');
这样你就不需要明确等待了。如果元素是可点击的,那么浏览器会立即点击它,否则它会在超时之前等待5秒。你也可以增加等待时间。
答案 1 :(得分:2)
不要等待页面本身,而是等待页面上的元素。
诀窍是先等待元素出现,然后等待它显示出来。只是打电话" isDisplayed"如果你不等待" isPresent"会导致错误。第一。这是一个很好用的功能。
function waitForElement(el, waitTimeoutMilliseconds){
return browser.wait(function() { return el.isPresent(); }, waitTimeoutMilliseconds)
.then(function(){
return browser.wait(function() { return el.isDisplayed(); }, waitTimeoutMilliseconds);
});
}
而不是
browser.sleep(5000);
var elmOK = browser.driver.findElement(by.xpath('//*[@id="lnav"]/li[3]/a'));
yield elmOK.click();
DO
var elmOk = element(by.xpath('//*[@id="lnav"]/li[3]/a'));
waitForElement(elmOk, 5000);
elmOk.click();