【问题标题】:How to handle protractor test to run in a sequential order如何处理量角器测试以按顺序运行
【发布时间】:2017-01-10 08:14:49
【问题描述】:

这是我的块,其中包含 element.element(by.model("$ctrl.benchmark.name")); 这在 Dom 上不存在。它给我的错误是元素不在页面上,但仍然执行在它之后编写的所有代码行。如果以上通过,我希望它按顺序处理,然后只转到下一个。如何在 Protractor 中处理这些类型的问题。

it("Test BenchMark",function(){
    browser.getTitle().then(function (name) {
        console.log(name);

        browser.sleep(2000);
        element(by.linkText("Manage Benchmarks")).click();
        browser.sleep(4000)


        //element(by.xpath("//main[@class='ng-scope']//a[text()='Create Benchmark']")).click();
        console.log("megha");
        element(by.model("$ctrl.benchmark.name")).sendKeys("bench");
        element(by.buttonText("Save")).click();
        console.log(megha);
        element(by.xpath("//button[@class='dropdown-toggle']")).click();
        console.log("dropdown clicked")

    });

【问题讨论】:

  • 一种选择是切换到 typescript 并为每个测试使用 async/await

标签: protractor synchronous


【解决方案1】:

您所期望的行为不会由 Protractor 处理,它将由测试框架(例如:Jasmine)处理。但是

 "Jasmine doesn't support failing early, in a single spec. The idea is to give     
  you all of the failures in case that helps figure out what is really wrong 
  in your spec"

【讨论】:

    【解决方案2】:

    您可以将browser.wait()Expected Conditions 结合使用。

    browser.wait() 阻止控制流执行,直到一个承诺得到解决,并且预期条件都评估为一个承诺。

    因此,在您的情况下,您可以使用presenceOf() 和/或visibilityOf()

    var EC = protractor.ExpectedConditions;
    var el = element(by.model("$ctrl.benchmark.name"));
    var present = EC.presenceOf(el); // wait for it to be added to DOM
    var visible = EC.visibilityOf(el); // wait for it to be visible on page
    browser.wait(EC.and(present, visible), 10000); // wait maximum of 10 seconds
    // rest of code
    

    【讨论】:

    • browser.wait() 返回一个 Promise,因此要在此之后编写代码,您需要使用 .then()。有很多等待,它变得非常嵌套。
    • @FCin 你不需要.then(),承诺符合预期条件
    • 但是您必须使用.then() 来解决它才能继续进行测试。我说的是你有browser.wait(EC.and(present, visible), 10000); 并且下一行是console.log('abc'); 的情况。 Console.log 将在 browser.wait 完成之前执行,除非您使用 .then()
    • 不,您不必明确解决它。那是因为console.log() 不是一个承诺,量角器维护一个待处理的承诺队列。但如果你要给它另一个命令,比如.click()expect 语句,它们会以正确的顺序执行。
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多