2017-01-10 127 views
1

这是我的块,其中包含element.element(by.model("$ctrl.benchmark.name")); Dom不存在。它给了我错误,元素不在页面上,但仍然执行所有代码行。如果以上通过则我只要按顺序处理然后去下一个。我如何处理量角器中的这些类型的问题。如何处理量角器测试,以按顺序运行

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") 

    }); 
+0

一个办法是切换到打字稿和使用异步/等待您的每个测试 – FCin

回答

0

您期待的行为不会被量角器处理,它会通过测试框架(例如: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" 
0

您可以使用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 
+0

'browser.wait()'返回一个承诺,所以为了以后写代码,你需要使用'。然后()'。随着许多等待,它变得非常嵌套。 – FCin

+0

@FCin你不需要'.then()',承诺是满足预期条件 – Gunderson

+0

但是你必须使用'.then()'来解决它以便继续测试。我正在谈论的情况是,你有'browser.wait(EC.and(present,visible),10000);'和下一行是'console.log('abc');'。 Console.log将在'browser.wait'完成之前执行,除非您使用'.then()' – FCin

相关问题