我看到其他量角器相关帖子提到如何等待元素变得可见.但是,最近,我遇到了一个相反的用例.我想等一个元素,直到它变得不可见.因为我找不到任何具体的信息.我继续前进,想出了一个解决方案.
var ptor = protractor.getInstance();
ptor.wait(function() {
return element(by.css('#my-css-here')).isDisplayed().then(function(isVisible){
console.log('is visible :' + isVisible);
return !isVisible;
});
}, 12000).then(function(){
//do whatever you want
});
Run Code Online (Sandbox Code Playgroud)
希望它有所帮助.任何建议都是受欢迎的.
谢谢,
我观看了2013年8月上传的视频(https://www.youtube.com/watch?v=idb6hOxlyb8).它声称我们应该使用
ptor.get(url)
而不是
browser().navigateTo(url)
在未来.但是,当我在量角器主页(在git hub上)查看文档时,他们的最新示例仍在使用浏览器.
我想知道是否有人知道要使用的动作
var ptor = protractor.getInstance()
还在发生吗?
非常感谢你提前!
我正在为Protractor的谦逊Angular应用程序编写一些e2e测试.
我的应用程序工作正常,单元测试通过所有,e2e也使用...直到这一个:
appE2ESpec.js
describe('adding an item', function() {
var items,
addItemButton,
startCount;
beforeEach(function() {
items = element.all(by.css('li.item'));
addItemButton = element(by.id('addItemButton'));
startCount = items.count();
});
it('should display a new item in list', function() {
addItemButton.click();
expect(items.count()).toEqual(startCount+1);
});
});
Run Code Online (Sandbox Code Playgroud)
这就是我写测试的方法,但是,
问题是: items.count()返回一个promise,我知道,但我无法强制Protractor解决它.所以我明白了:
Failures:
1) myApp adding an item should display a new item in list
Message:
Expected 6 to equal '[object Object]1'.
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
items.count().then(function(count) {
startCount = count;
//console.log(startCount) --> "6" Perfect!
});
Run Code Online (Sandbox Code Playgroud)
但最后得到了相同的结果......我不能把它expect放进去then,我也想到了.
我需要使用指令将布尔值显示为yes/no.我的指示如下
directives.directive('niBooltoYesno',
function () {
return {
restrict: 'EA',
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
function formatter(value) {
if (value) {
return value === true ? 'Yes' : 'No';
} else {
return '';
}
}
ngModel.$formatters.push(formatter);
}
};
});
<ni-boolto-yesno data-ng-model="set_unit.isActive" ></ni-boolto-yesno>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.请帮助我.
我试图弄清楚如何在不使用表单标签的情况下检查ngModel的状态.我没有包装器只是带有ngModel的基本输入元素.
到目前为止我找到的所有例子都是用于表格验证,在这种情况下,没有任何形式.
当我尝试类似的东西:
HTML
<input type="text" ng-model="lastname">
Run Code Online (Sandbox Code Playgroud)
脚本:
if($scope.lastname.$dirty) {
console.log('last name has changed');
}
Run Code Online (Sandbox Code Playgroud)
我得到了不确定.
有没有办法检查ngModel的状态而不向它添加watch指令?它似乎是基本的东西,是框架的一部分.为什么这不起作用?
上下文
我正在尝试使用multiCapabilities配置选项的全新Protractor 0.19.0.它实际上正如文档中所描述的那样工作:
第二点对我来说是个问题.我的一个应用程序不处理与数据的多个连接,这意味着测试失败.
我的问题是:
是否可以限制Webdriver的最大实例数以禁用此应用程序的并行测试?
我试过了什么
我在Selenium Webdriverjs Grid2维基中找到了一个maxSession非常适合我的情况的参数!但我试图在我的Protractor配置中添加它,但没有成功.
maxSession也是所需的能力.谁知道它是否正常工作?
这是multiCapabilities PR主题的链接,我在那里留下了评论.
如果您需要更多信息,请随时问:)
提前致谢!!
编辑:专门的GitHub问题
编辑2:我最近试图添加seleniumArgs: ['-maxSession=1']到我的Protractor配置,不幸的是这也不起作用...
我在我的单元测试中使用基本模式(使用karma/jasmine运行)用于我的角度组件,我无法确定我的解决方案是否比我的同事建议的解决方案更安全或过度:
TL; DR:在单元测试中直接使用$ rootScope的优点/缺点是什么(仅限!)?
这是我目前的模式:
describe('component', function() {
var $scope;
beforeEach(module('myModule'));
beforeEach(inject(function($rootScope) {
$scope = $rootScope.$new();
//working with it now
$scope.foo = 'fooValue';
$scope.$digest();
}));
afterEach(function() {
$scope.$destroy();
});
describe('subcomponent', function() {
it('should do something', function() {
//arrange
//act
//assert
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的同事建议使用:
$scope = $rootScope;
Run Code Online (Sandbox Code Playgroud)
代替
$scope = $rootScope.$new();
Run Code Online (Sandbox Code Playgroud)
会更简单,没有副作用,因为在每个规格之前inject创建一个新的$injector,提供一个新的和干净的$rootScope.
那么,这两种解决方案的好处/风险可能是什么?
Nota bene:在我们的应用程序中,我们总是避免$rootScope直接使用.
我正在使用AngularJS并且ng-submit像这样:
<form ng-submit="submit(foo); foo='';">
<input type="number" ng-model="foo">
</form>
Run Code Online (Sandbox Code Playgroud)
在桌面计算机上的Chrome中,我可以在输入中按Enter键以提交表单(submit(foo)在这种情况下调用).
在Chrome for Android(KitKat)中,它不起作用.但是,如果我将输入更改为type="text"然后按"Go"时它会起作用.
我怎样才能获得形式的行为像它的input type="text"同input type="number"?我正在使用,type="number"因为我希望设备调出数字键盘.
这是一个说明问题的插件:http://plnkr.co/edit/4WJfdoKgXu7o6ZsM8WFx?p=preview (或http://goo.gl/IiQzGf,如果你在移动设备上).
编辑:
监听使用JavaScript进入并没有工作:http://plnkr.co/edit/07QGA1s4UCyop8IB8Dmx?p=preview
编辑2:
这不是AngularJS问题.这是一个HTML问题:http://embed.plnkr.co/ZVD0ZtmEutWZr7P7vq2b/preview
我希望通过使用量角器的e2e测试来查看大型应用程序的源代码(如果可能,在生产中).
有人可以提供这些应用程序的链接吗?
Jasmine 的spyOn()方法是否允许执行监视函数,或者是否有点 - 当监视方法(即将被)调用时拦截调用,并返回true.
PS:有人能帮我解释一下 的spyOn()内部工作原理吗?
angularjs ×7
protractor ×5
javascript ×3
unit-testing ×2
android ×1
element ×1
end-to-end ×1
forms ×1
hidden ×1
html ×1
invisible ×1
jasmine ×1
karma-runner ×1
testing ×1
wait ×1