【问题标题】:Setting an Angular model using Protractor使用 Protractor 设置 Angular 模型
【发布时间】:2014-05-29 12:37:58
【问题描述】:

我正在尝试使用 Protractor 在我的网站上模拟用户故事。

用户必须输入使用自动完成的输入。在现实生活中,用户必须在输入中键入一些文本,然后使用鼠标或更自然地使用向下箭头键选择正确的命题。

问题是我似乎无法用 Protractor 模拟它。 element.sendKeys 只是不允许您这样做。我已经尝试了十几种不同的方式,但最多只能产生不可预测的结果。

所以我想直接操作我输入的 ng-model。有没有办法从量角器访问元素的范围并在其上调用函数/设置属性?

这是我的问题的简化版本:

查看:

<div ng-controller="MyController"> 
  <input id="my-input" ng-model="myModel"/>
</div>

控制器:

 myModule.controller('MyController', ['$scope', function($scope){
   $scope.myModel = "";
   //[...]
 }]);

e2e 量角器测试:

describe("setting myModel to a fixture value", function(){
  it("should set myModel to 'a test value'", function(){
    var myInput = element('my-input');
    // Now what?
  });
});

【问题讨论】:

  • 一些小提琴,或者一些代码sn-p?
  • 我已经添加了一些代码sn-ps。
  • element('my-input'); 是您的真实密码吗?我会尝试的顺序是myInput.click() 给它焦点,然后myInput.sendKeys('beginningOfAnAutoCompletedWord'); 然后myInput.sendKeys('Protractor.Key.ARROW_DOWN');。然后,根据您的实现,您可以单击或发送选项卡或 Enter 键。
  • 这很有趣,我在文档中没有找到关于箭头键的内容,谢谢!事实上,我终于找到了一种解决方法,可以针对我自己的这个问题的特定实例单击我的下拉菜单。但是,我认为访问角度模型的问题本身就值得回答,无论如何我都不能就此结束这个问题,这会产生误导。

标签: javascript angularjs protractor


【解决方案1】:

您可以使用.evaluate() 直接设置您的模型值:

var elm = element(by.model("obj.field"));
elm.evaluate("obj.field = 'test';");

获取模型值:

elm.evaluate("obj.field").then(function (value) {
    console.log(value);
});

【讨论】:

  • 不错的答案,我可以以某种方式动态使用它吗?例如 app.setDatepicker = function(path, date) { var elm = element(by.model(path)); elm.evaluate(路径 + " = " + 日期); };
  • @artdias90 是的,当然,这些只是字符串,您可以将它们连接起来——不过请注意引号。
【解决方案2】:

在这个答案中:How to select option in drop down protractorjs e2e tests

他们使用这个:.sendKeys(protractor.Key.ARROW_DOWN); 发送向下箭头。

值得一试。

【讨论】:

  • 其实.sendKeys(protractor.Key.ARROW_DOWN)的可读性更强。
  • @fracz 我现在已经尝试过了,它收到一个关于“RangeError: Maximum call stand size exceeded”的错误
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2019-08-26
  • 2013-06-11
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
相关资源
最近更新 更多