使用Protractor测试非角度网站

时间:2016-10-18 09:23:41

标签: javascript selenium protractor

我正在尝试通过Protractor测试我的网站,这是一个非角度的网站。我的代码是:

describe("Supplier Portal: Login ", function () {
    //ui.setSmallScreenSize();
    // ui.testLogger(100);
    it("test", co.wrap(function* () {
         browser.ignoreSynchronization = true;

        yield browser.driver.get("https://cit.supplier.ext.here.com/");
        yield element(by.xpath("//*[@id=\"rnav\"]/li[2]/a")).click();

       var elmOK = element(by.xpath( "//*[@id=\"sign-in-email\"]"));
       browser.driver.wait(protractor.until.elementIsVisible(elmOK.getWebElement()))

    }));
}); 

但是当我尝试执行代码时出现以下错误:

Failed: No element found using locator: By(xpath, //*[@id="sign-in-email"])

但元素在网站上。

请告知我做错了什么

1 个答案:

答案 0 :(得分:1)

由于您正在处理非角度站点并使用browser.ignoreSynchronization = true,因此Protractor不会等待angular变量变为可用,因此它会开始触发测试,因为它认为应用已准备就绪,更多信息here

您需要使用Control Flow操纵Expected Conditions,以便Protractor知道它正在等待某事。这将使您的测试更加一致和可靠。

一些指导你的例子:

等待元素加载/出现在DOM中:

var EC = protractor.ExpectedConditions;
var ele = element(by.css('div.class'));
browser.wait(EC.presenceOf(ele), 5000);

我传入的5000参数值表示等待最大为5秒,如果在5秒内不存在则失败。

等待元素可见:

browser.wait(EC.visibilityOf(ele), 5000);

等待元素可点击:

browser.wait(EC.elementToBeClickable(ele), 5000);

同样,重要的是要注意这些是隐式等待,并且它们将等待提供的时间参数的最大。这不是一个有保证的等待时间,当他们找到你告诉它等待的元素时,他们会尽快开火。