如何使用量角器

时间:2016-11-11 09:19:26

标签: javascript angularjs protractor

我正在使用量角器为非角度js网站创建测试脚本。我的代码如下:

var co = require('co');
var path = require('path');

describe("TEST", function () {

    it("test", co.wrap(function* () {
        browser.ignoreSynchronization = true;

        yield browser.get(URL, 60000);
        browser.sleep(5000);// I want to remove the sleep statements
        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("uid");
            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);// I want to remove the sleep statements
        var elmOK = browser.driver.findElement(by.xpath('//*[@id="lnav"]/li[3]/a'));
        yield elmOK.click();
        browser.sleep(1500);// I want to remove the sleep statements
        browser.driver.findElement(by.xpath('//*[@id="administration"]/div/div[1]/select/option[2]')).click();
        browser.sleep(5000);// I want to remove the sleep statements

        browser.driver.findElement(by.xpath('//*[@id="administration"]/div/div[2]/table/tbody/tr[1]/td[10]/span')).click();
        browser.sleep(5000);// I want to remove the sleep statements

        browser.driver.findElement(by.xpath('//*[@id="content"]/div/div[2]/div/div/div/div[3]/button[1]')).click();//Delete the file
        browser.sleep(5000);// I want to remove the sleep statements
    }));




});

如果我在代码中添加sleep,则测试按预期运行。但我想完全从我的代码中删除sleep语句。我提到了许多其他堆栈溢出问题,但它没有帮助。 :(

我第一次使用browser.manage().timeouts().implicitlyWait(5000);,但我认为加载我的网址没有延迟。

我使用了预期的条件,但它也没有用。

我添加了browser.wait(1000),但我的脚本失败了。请告诉我,因为我觉得这个问题有点迷失。

1 个答案:

答案 0 :(得分:0)

我认为问题在于这一行:

browser.ignoreSynchronization = true;

来自this SO

  

让量角器不等待Angular承诺,例如来自$ http或$ timeout的解析

量角器元素函数都返回promises,所以这可能是你问题的原因?

此结构看起来有点奇怪:

var elmOK = browser.driver.findElement(by.css('a[href="#login"]'));
yield elmOK.click();

我会简单地简化:

element(by.css('a[href="#login"]')).click();