量角器测试用例

时间:2016-06-03 09:11:10

标签: javascript angularjs automation protractor

我是量角器e2e测试的新手。我写了我的第一个测试代码..我想知道你的反馈和我可以改进它的方法。

  describe("Map feedback Automation",function(){
it("Check if the Url works ",function()
{
    browser.get(browser.params.url);
    expect(browser.getCurrentUrl()).toContain("report");

});it("test browser should reach report road option",function()
{
    element.all(by.css('div[ng-click="setLocation(\'report_road\')"]')).click();
    expect(browser.getCurrentUrl()).toContain("report_road");

});


it("test browser should reach report road missing",function()
{
    element.all(by.css('div[ ng-click="mapFeedBack.editObject= mapFeedBack.createMapObjectModel();setLocation(mapFeedBack.noMap?\'road_new\':\'choose_location_road_new/road_new\')"]')).click();
    expect(browser.getCurrentUrl()).toContain("choose_location_road_new/road_new");
    browser.sleep(browser.params.sleeptime);
});


it("test browser should zoom on map ",function() //manual 
{


element.all(by.css('div[ng-click="zoomIn()"]')).click();            
browser.sleep(browser.params.sleeptime);
element.all(by.css('div[ng-click="zoomIn()"]')).click();
browser.sleep(browser.params.sleeptime);


element.all(by.css('div[ng-click="zoomIn()"]')).click();
browser.sleep(browser.params.sleeptime);

element.all(by.css('div[ng-click="zoomIn()"]')).click();
browser.sleep(browser.params.sleeptime);


}); 

it("Should click on ok option",function()
{

    element(by.buttonText('OK')).click();
    expect(browser.getCurrentUrl()).toContain("road_new");

}); 
it("test browser should reach report road option",function()
{

    browser.sleep(browser.params.sleeptime);
    expect(browser.getCurrentUrl()).toContain("road_new");

}); 



it("should  enter a road name",function() 
{       

 browser.sleep(browser.params.sleeptime);

 var testroadname = browser.params.testroadname;


 element(by.model("mapFeedBack.editObject.roadName")).sendKeys(testroadname);
browser.sleep(browser.params.sleeptime);




});


    it("should check the type of road is highway",function()  //spec3
{

element(by.model("mapFeedBack.editObject[attrs.select].selected")).$("[value='string:app.road.roadType.highway']").click();




});


    it("should  submmit the map feedback",function() 
{       

element(by.css('button[ng-click="onSubmit({reportType: reportType})"]')).click();
    browser.sleep(browser.params.sleeptime);
});});

我的一位同事告诉我要删除延迟

browser.sleep(browser.params.sleeptime);

并在单击放大按钮时添加一些事件。你能告诉我如何实现它吗?

2 个答案:

答案 0 :(得分:3)

正如他们所说,每个代码都有自己的smell。 Protractor特定代码产生的最糟糕的气味之一是使用browser.sleep()来解决时序问题。 browser.sleep()调用通常会使测试速度比需要的慢得多,偶尔也不会添加足够的延迟来进行测试通过,使代码的作者增加睡眠延迟,这再次使测试更慢。顺便说一下,有一个相关的第三方ESLint rule可以帮助您避免在e2e代码库中使用browser.sleep()

使用browser.wait()和一组内置Expected Conditions的更强大的替代方法是使用硬编码延迟。这里的主要优点是 browser.wait()只要有必要就会等待不断检查预期条件的状态。

例如,在您的情况下,您可以使用elementToBeClickable条件让世界变得更好地进行测试自动化:

var EC = protractor.ExpectedConditions;
var elm = element(by.id("myid"));

browser.wait(EC.elementToBeClickable(elm), 10000);
elm.click();

在这里,Protractor会等待到达up to真正有什么不同之处)10秒(是的,你仍然需要一个超时值)并且会提高一个如果元素不可点击,则超时异常。

答案 1 :(得分:1)

您还可以使用以下等待命令等待按钮可见:

var btn = element(by.css("mycss"));
browser.driver.wait(protractor.until.elementIsVisible(btn), 5000);
btn.click();

可见性意味着该元素不仅会显示,而且其高度和宽度也会大于0.