我是量角器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);
并在单击放大按钮时添加一些事件。你能告诉我如何实现它吗?
答案 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.