【发布时间】:2018-07-05 21:33:29
【问题描述】:
我正在使用量角器版本 5.2.2。我的项目中有 2 个日期字段。我使用以下代码输入日期。
element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input")).sendKeys("01-02-2019");
browser.sleep(5000);
element(by.xpath("//*[@id='divContractInfo']/div[1]/div[3]/div/my-date-picker/div/div/input")).sendKeys("12-02-2020");
使用此代码,只有输入的第一个字符输入到第一个日期字段中。但是第二个日期输入完全输入到第二个日期字段中。
当我使用另一个代码(如下所示)时,日期值完全输入到日期输入框中。但是在输入表单中的其余字段时,它会给出验证错误,因为“需要日期”。什么是解决办法?
var inputEle = element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input"));
var inputValue = 04-12-2020;
inputEle.click();
browser.executeScript('arguments[0].value=arguments[1]',
inputEle.getWebElement(),
inputValue);
UI 代码(角度)如下。
<div _ngcontent-c6="" class="frx-form-field-container">
<label _ngcontent-c6="" class="frx-form-label">Effective Date:</label>
<div _ngcontent-c6="" class="frx-form-input-field-container-small">
<my-date-picker _ngcontent-c6="" class="frx-mydatepicker-field ng-pristine ng-valid ng-touched" formcontrolname="effectiveDate" frxconfirmequalvalidator="terminationDate" name="effectiveDate" ng-reflect-frx-confirm-equal-validator="terminationDate" ng-reflect-options="[object Object]" ng-reflect-name="effectiveDate" ng-reflect-frx-validate="[object Object]" ng-reflect-validation-message="" ng-reflect-status="false"><div class="mydp" ng-reflect-ng-style="[object Object]" style="width: 145px;"><!--bindings={
"ng-reflect-ng-if": "true"
}--><div class="selectiongroup"><!--bindings={
"ng-reflect-ng-if": "true"
}--><input autocomplete="off" autocorrect="off" class="selection ng-pristine ng-valid ng-touched" ngtype="text" spellcheck="false" ng-reflect-klass="selection" ng-reflect-ng-class="[object Object]" ng-reflect-ng-style="[object Object]" ng-reflect-is-disabled="false" ng-reflect-model="06-24-2018" aria-label="Date input field" placeholder="" style="height: 28px; font-size: 14px;"><div class="selbtngroup" style="height: 28px;"><!--bindings={
"ng-reflect-ng-if": "false"
}--> <!--bindings={
"ng-reflect-ng-if": "false"
}--> <!--bindings={
"ng-reflect-ng-if": "true"
}--><button class="btnclear btnclearenabled" type="button" ng-reflect-klass="btnclear" ng-reflect-ng-class="[object Object]" aria-label="Clear Date"><span class="mydpicon icon-mydpremove"></span></button> <button class="btnpicker btnpickerenabled" type="button" ng-reflect-klass="btnpicker" ng-reflect-ng-class="[object Object]" aria-label="Open Calendar"><span class="mydpicon icon-mydpcalendar"></span></button></div></div><!--bindings={
"ng-reflect-ng-if": "false"
}--></div></my-date-picker>
</div>
</div>
<div _ngcontent-c6="" class="frx-form-field-container">
<label _ngcontent-c6="" class="frx-form-label">Termination Date:</label>
<div _ngcontent-c6="" class="frx-form-input-field-container-small">
<my-date-picker _ngcontent-c6="" class="frx-mydatepicker-field ng-untouched ng-pristine ng-valid" formcontrolname="terminationDate" frxconfirmequalvalidator="effectiveDate" name="terminationDate" ng-reflect-frx-confirm-equal-validator="effectiveDate" ng-reflect-options="[object Object]" ng-reflect-name="terminationDate" ng-reflect-frx-validate="[object Object]" ng-reflect-validation-message="" ng-reflect-status="false"><div class="mydp" ng-reflect-ng-style="[object Object]" style="width: 145px;"><!--bindings={
"ng-reflect-ng-if": "true"
}--><div class="selectiongroup"><!--bindings={
"ng-reflect-ng-if": "true"
}--><input autocomplete="off" autocorrect="off" class="selection ng-untouched ng-pristine ng-valid" ngtype="text" spellcheck="false" ng-reflect-klass="selection" ng-reflect-ng-class="[object Object]" ng-reflect-ng-style="[object Object]" ng-reflect-is-disabled="false" ng-reflect-model="06-24-2019" aria-label="Date input field" placeholder="" style="height: 28px; font-size: 14px;"><div class="selbtngroup" style="height: 28px;"><!--bindings={
"ng-reflect-ng-if": "false"
}--> <!--bindings={
"ng-reflect-ng-if": "false"
}--> <!--bindings={
"ng-reflect-ng-if": "true"
}--><button class="btnclear btnclearenabled" type="button" ng-reflect-klass="btnclear" ng-reflect-ng-class="[object Object]" aria-label="Clear Date"><span class="mydpicon icon-mydpremove"></span></button> <button class="btnpicker btnpickerenabled" type="button" ng-reflect-klass="btnpicker" ng-reflect-ng-class="[object Object]" aria-label="Open Calendar"><span class="mydpicon icon-mydpcalendar"></span></button></div></div><!--bindings={
"ng-reflect-ng-if": "false"
}--></div></my-date-picker>
</div>
</div>
我不明白第一个日期输入未完全输入的原因。提前致谢。
【问题讨论】:
-
如果你这样做,它会起作用吗: element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-选择器/div/div/input")).sendKeys("0");然后 element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input")).sendKeys( "1");等等?如果是这样,这可能与发送密钥的速度有关。
-
感谢您的努力。我可以通过将其作为部分/字符传递来成功输入值。在第一步中,它只检测到第一个字符,所以在第二步中,我通过了其余字符完全进入该字段。为什么会这样?
-
查看 github.com/angular/protractor/issues/3196 但他们声称它已修复
标签: protractor