【问题标题】:Not able to give date value to the date picker in protractor无法为量角器中的日期选择器提供日期值
【发布时间】:2018-01-12 07:34:46
【问题描述】:

我使用 angular 4 和量角器 5.2.2 和黄瓜 3.2.0 我的 HTML 代码如下所示

<div _ngcontent-c2="" class="row">
                        <div _ngcontent-c2="" class="col-md-6">
                            <label _ngcontent-c2="" class="form-control-label frx-label" for="normal-field" id="lblDOB">
                                DOB </label>
                            <span _ngcontent-c2="">
                                <b _ngcontent-c2="">:</b>
                            </span>
                        </div>

                        <div _ngcontent-c2="" class="col-md-6">
                            <ng-datepicker _ngcontent-c2="" class="frx-ng2-date-picker ng-untouched ng-pristine ng-valid" _nghost-c3="" ng-reflect-options="[object Object]" ng-reflect-model="Fri Jan 12 2018 12:09:37 GMT+0"><div _ngcontent-c3="" class="ngx-datepicker-container"> <!--bindings={
"ng-reflect-ng-if": "true"
}--><input _ngcontent-c3="" class="ngx-datepicker-input ng-pristine ng-valid ng-touched" readonly="readonly" type="text" ng-reflect-model="01-12-2018">  <!--bindings={
 "ng-reflect-ng-if": "false"
}--> </div> </ng-datepicker>

                        </div>
                    </div>

我无法通过使用给出日期值

element(by.css(".ngx-datepicker-container input")).sendKeys("08-02-1990");

但是当我尝试点击同一个元素时,日期选择器弹出窗口将打开。 有什么想法吗?

【问题讨论】:

  • 只是在黑暗中拍摄 - 如果您将密钥发送到“datepicker”元素会怎样:element(by.css("ng-datepicker")).sendKeys("08-02-1990");

标签: protractor


【解决方案1】:

因为输入设置为readonly="readonly",所以sendKeys不能输入任何单词。

选项1)执行javascript设置输入值:

var inputEle = element(by.css(".ngx-datepicker-container input"));
var inputValue = '08-02-1990';
browser.executeScript('arguments[0].value=arguments[1]', 
                      inputEle.getWebElement(), 
                      inputValue);
// Click on the input box of Date to make application can detect the changes
// on input
inputEle.click(); // open date picker pop-up <br>
inputEle.click(); // close date picker pop-up <br>

选项 2) 执行 javascript 更改 Angular 模型

前提条件:
1.你的应用是Angularjs App
2.您知道存储输入值的模型名称(如果不知道请咨询开发人员)

我会用https://angularjs.org/上的例子来说明:

var modelEle = element(by.xxx) //elemnt binded the model name; 
// please find out which element binded the model name to store the date input by user
var modelName = '';

var modelValue = '08-02-1990';

var script = 'angular.element(arguments[0]).scope()' + 
             '.$apply(function(scope){scope[arguments[1]] = arguments[2]})';

browser.executeScript(script, 
                      modelEle.getWebElement(),
                      modelName,
                      modelValue);

【讨论】:

  • 非常感谢您的回复。实际上,我们的 DOB 部分处于暂停状态。现在只有它开始工作。所以通过使用上面的代码,我可以将日期设置到文本框中(运行时可以在 UI 中查看)。但是在提交时,应用程序会告诉这些字段是空的。它没有取给定的值。有什么方法可以克服这个问题吗?
  • 以上 javascript 在后台设置值不会改变角度模型。如果输入仍然设置为只读,您必须咨询您的开发人员如何在执行上述代码后更改角度模型。
  • 根据开发人员代码,在提交时,不考虑来自输入字段的值。相反,为日历提供单独的控制(ng-datepicker),并且仅在获取日期值(提交时)单击日历中的日期。所以在这种情况下,我该如何编写量角器自动代码。提前致谢。
  • 在上面脚本后面的输入框中再添加一个代码,上面好像更新了代码
  • 在运行上述代码时,它将日期值设置到输入框中,并在单击时打开日历弹出窗口,并且我们设置的日期值在单击后不会清除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多