【问题标题】:sendKeys() passes only partial value or Not able to enter the date inputs into the date fieldssendKeys() 仅传递部分值或无法将日期输入输入日期字段
【发布时间】: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


【解决方案1】:

两个日期选择器的 UI 代码似乎相同,因此元素选择是正确的。在输入第一个日期之前尝试添加sleep

【讨论】:

  • 我在输入第一个日期之前尝试了 8,10,15 毫秒,但没有帮助。
  • 在发送值之前在日期选择器文本框中尝试click()element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input")).click();browser.sleep(3000); element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input")).sendKeys("01-02-2019");
  • 我已经尝试了 click() 并在发送值之前等待。但这也无济于事。
  • 使用browser.executeScript("arguments[0].setAttribute('value', '01-02-2019')", element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input"))); 而不是element(by.xpath("//*[@id='divContractInfo']/div[1]/div[2]/div/my-date-picker/div/div/input")).sendKeys("01-02-2019");
  • 感谢您的努力。但上面的代码对我也不起作用。我已经更新了问题。在这种方法中,我可以将输入完全输入到字段中。但它会给出验证错误。任何解决方案?提前致谢。
猜你喜欢
  • 2015-03-17
  • 2012-09-07
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多