所以我在问这个之前已经做了很多研究,但没有一个是我想要的.
我有一个带有角度模块的app appstrap.模块内的控制器发出一些http请求.现在我正在为ui进行单元测试我的应用程序,我需要模拟http请求.我读过的所有嘲笑都是用茉莉花完成的,但我不想用它.
我希望每当我打开应用程序时,所有请求都会被嘲笑.我已经尝试了角度模拟和后端嘲笑,它们都没有工作.我不想预先填充范围元素,因为代码应该是部署就绪的.
为了等待目的,我使用这种等待功能:
browser.wait(function()
{
return browser.isElementPresent(by.repeater('recentName in recentNames').row(0));
}, 10000);
Run Code Online (Sandbox Code Playgroud)
我如何等待元素从页面中消失?我的项目有很多模态窗口,因为元素总是出现在页面上我不时遇到困难和测试失败,因为我使用了错误的元素等待.例如,我有这样的元素,在单击Enter后模态窗口关闭时消失:
<div class="modal-backdrop in"></div>
Run Code Online (Sandbox Code Playgroud) 我尝试扩展ElementFinder库.我想知道如何才能要求使用相同名称的不同方法?我想做一些像:
// spec.js
var ef1 = require('./ef_extend1.js');
var ef2 = require('./ef_extend2.js');
expect(column_resizer.ef1.getWidth()).toEqual(18);
expect(column_resizer.ef2.getWidth()).toEqual(18);
Run Code Online (Sandbox Code Playgroud)
现在我有一个错误:
TypeError: Cannot read property 'getWidth' of undefined
Run Code Online (Sandbox Code Playgroud)
我需要的图书馆:
// ef_extend1.js
var ElementFinder = $('').constructor;
ElementFinder.prototype.getWidth = function() {
return this.getSize().then(function(size) {
return size.width + 1;
});
};
Run Code Online (Sandbox Code Playgroud)
第二个:
// ef_extend2.js
var ElementFinder = $('').constructor;
ElementFinder.prototype.getWidth = function() {
return this.getSize().then(function(size) {
return size.width;
});
};
Run Code Online (Sandbox Code Playgroud) 我正在测试登录和注销功能,下面是我的测试用例
it('should redirect to login page on click of logout',function(){
signInPage.email.sendKeys('zahid.afaque@meltwater.com');
signInPage.password.sendKeys(1234);
signInPage.loginButton.click();
expect(browser.getCurrentUrl()).toMatch(/\/collections/);
signInPage.profileImage.click();
signInPage.logout.click();
browser.waitForAngular();
expect(browser.getCurrentUrl()).toMatch(/\/login/);
});
Run Code Online (Sandbox Code Playgroud)
当我在测试上运行时,它的失败和下面是错误消息
Error: Timed out waiting for Protractor to synchronize with the page after 11001ms. Please see https://github.com/angular/protractor/blob/master/docs/faq.md
Run Code Online (Sandbox Code Playgroud)
我尝试使用,browser.waitForAngular();但它没有帮助.当我删除期望"expect(browser.getCurrentUrl()).toMatch(/\/login/);"然后它已经过去了.任何人遇到同样的问题,任何帮助都是适当的
javascript jasmine angularjs-resource angularjs-e2e protractor
如果我有这样的HTML:
<body>
<div id="menu">
<div id="button"> {{ someBinding }} </div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
我在量角器中有这样的声明:
ptor.findElement(By.xpath("/body/div[@id='menu']/div[@id='button']"));
Run Code Online (Sandbox Code Playgroud)
我将使用什么来获取{{someBinding}}的值?似乎量角器试图将值与绑定名称进行比较.因此,如果我希望{{someBinding}}说"Hello World",则会抛出错误说明
Expected: {{someBinding}} to equal 'Hello World'
Run Code Online (Sandbox Code Playgroud) 我正在使用 Protractor 编写测试,我想了解如何测试电子邮件链接。我的意思是,测试普通链接很容易,因为您只需查看新 URL。但是当您单击电子邮件链接时,您可以转到外部电子邮件提供商,所以有什么解决方案吗?谢谢
我有一些(Angular JS模板)HTML如下:
<div class="data-handler-container">
<div class="row">
<div class="data-handler" ng-if="dataController.showDistance()">
<p>{{ 'Item Count' | translate}}
<p class="metric">{{dataController.project.item_total | converter:dataController.user.unit | number: 6}}<span class="unit">{{dataController.user.unit}}</span></p>
</div>
<div class="data-handler">
<p>{{ 'Total Time' | translate}}</p>
<p class="metric">{{dataController.project.time_total | format:'time':'hh:mm:ss'}}</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我现在正在使用量角器编写e2e测试.我需要识别度量元素,以便我可以访问测试中的值.
我不认为我可以简单地使用class在这种情况下,因为第一个元素是在一个ng-if所以可能不存在.我必须按类识别,然后在我的测试中编写一些逻辑来计算返回数组中的项目 - 并根据计数匹配它们.在这个例子中,它不会太复杂,但在其他情况下,它将是笨重的.
我可以在具有特定值的项目之后选择段落 - Total Time例如,这将起作用,但似乎不太理想.如果另一个页面元素具有相同的文本怎么办 - 我的测试需要再次更新.
据我所知,我不能通过模型识别项目,因为它们是通过过滤器传递的,我不想指定所有过滤器等......作为选择器的一部分.
我想验证伪元素的文本内容.承诺从使用中返回ptor.executeScript("window.getComputedStyle(jQuery('.my-class')[0], ':after').content").then(function(data){
console.log(arguments) // {'0':null}
});
我也试过在预期中放弃它,但我猜这是因为同样的原因失败了.
既然CSS声明指向了元素的一个属性,我应该尝试读取该属性吗?
我编写了一个利用require js的角度项目,因此大多数javascript都不会在登陆特定页面之前加载.(包括angular.js)
在编写流程时,我不得不使用browser.driver代替ptor,这很有效,直到角度组件进入.现在我试图找到一种方法将ptor的初始化压缩到browser.driver并滚动特定流量后的角度.所以我有这样的事情
browser.driver.getCurrentUrl().then(function(url){
ptor = protractor.getInstance();
// ptor.ignoreSynchronization = true;
ptor.get(url);
})
ptor.sleep(2000);
Run Code Online (Sandbox Code Playgroud)
即使我超时,这似乎是在声明之后未定义ptor.我该怎么做这里的交换.并使用url做一个量角器的构造函数.没有重装.
--------------插件---------确定所以这就是我所拥有的
searchInput = browser.driver.findElement(by.css('#searchstring'));
searchInput.sendKeys('logan airport');
searchInput.sendKeys(protractor.Key.ENTER)//.perform();
browser.driver.sleep(6000);
browser.driver.wait(function(){ //angular loads here
return browser.driver.getCurrentUrl(function(url){
searchUrl = url;
return /screwdriver/.test(url);
});
}, 10000)
browser.driver.sleep(2000);
/*UNEXECUTED CODE HERE: Error while waiting for angular to sync with your page*/
firstItem = element.all(by.css('.itemContainer')).get(1).click();
browser.driver.sleep(10000);
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情......
searchInput = ptor.findElement(protractor.By.css('#searchstring'));
searchInput.sendKeys('logan airport');
searchInput.sendKeys(protractor.Key.ENTER)//.perform();
ptor.sleep(6000);
ptor.wait(function(){ //this page loads angular, but stuck on white page, which with previous version this is fluent, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个量角器方法,它将从此下拉列表中选择值。下拉菜单包含 4 个值,其中之一是“Delta”。我如何从这个选择器中选择值,因为它没有任何我可以使用的选项标签。
我意识到实际选项在另一个标签下。如何选择选项?下面的似乎不起作用。
element(by.cssContainingText('mat-select-panel mat-select-content .mat-option .mat-option-text', 'Fund')) .click();
angularjs-e2e ×10
protractor ×9
angularjs ×5
javascript ×5
e2e-testing ×2
xpath ×2
end-to-end ×1
html ×1
jasmine ×1
overloading ×1
testing ×1
typescript ×1