要删除Browser.sleep()

大家好我正在量angular器testing一个nonangular网站。 最初,当我testing了browser.sleep()以便页面完全加载。 我知道添加browser.sleep不是一个好的testing方法,因此想从代码中移除它。

我尝试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); })); 

而不是等待页面本身等待页面上的元素。

诀窍是首先等待元素出现,然后等待显示。 只要调用“isDisplayed”会导致错误,如果你不等待“isPresent”第一。 这是一个很好的function使用。

 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(); 

 var elmOk = element(by.xpath('//*[@id="lnav"]/li[3]/a')); waitForElement(elmOk, 5000); elmOk.click(); 

你可以使用量angular器的预期条件。

 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秒。 你也可以增加等待时间。