应用程序:更改Android日期选择器值Javascript/NodeJS

应用程序:更改Android日期选择器值Javascript/NodeJS,javascript,android,node.js,datepicker,appium,Javascript,Android,Node.js,Datepicker,Appium,我们正在尝试为混合Android应用程序自动化测试,但我们在日期选择器上被卡住了。我们希望将日期选择器中的值更改为特定日期(六月->五月)。因此,我们检索了EditText元素并尝试更改文本 我们基本上尝试了两种可能性: 使用sendKeys()直接设置文本 首先选择所有文本,然后设置文本 使用第一个选项appium告诉我们无法完全删除文本(使用appium 1.4.0,sendKeys应该清除编辑文本)。取而代之的是前两个被删除的字符,我们被困在“n.”这个字符里。我们还尝试在数字选择器上设置

我们正在尝试为混合Android应用程序自动化测试,但我们在日期选择器上被卡住了。我们希望将日期选择器中的值更改为特定日期(六月->五月)。因此,我们检索了EditText元素并尝试更改文本

我们基本上尝试了两种可能性:

  • 使用sendKeys()直接设置文本
  • 首先选择所有文本,然后设置文本
  • 使用第一个选项appium告诉我们无法完全删除文本(使用appium 1.4.0,sendKeys应该清除编辑文本)。取而代之的是前两个被删除的字符,我们被困在“n.”这个字符里。我们还尝试在数字选择器上设置文本(使用sendKeys())(更改为android.widget.EditText->android.widget.NumberPicker)

    对于第二个选项,我们尝试使用触摸动作(wd.TouchAction)长按输入字段并选择整个文本。然后我们使用sendKeys覆盖所选文本。这个选项的问题是使用长按不起作用

    driver.elementsByClassName("android.widget.EditText").then(function (elements) {
        var promise = elements[0];
    
        var action = new wd.TouchAction();
    
        action.press({el: promise}).wait(5000).release();
        return driver.performTouchAction(action);
    });
    

    }))


    我们还试图改变环境。为了检索元素,我们需要本机上下文,但要确保我们也尝试了WEBVIEW上下文并在两者之间切换。

    更改日期选择器文本分3步完成:

  • 长按选择文本(var操作)
  • 删除带有按键事件的文本(deviceKeyEvent(67))
  • 设置所需的文本(setText(文本)/sendKeys(文本))
  • 检索编辑文本元素是通过android“android.widget.EditText”上的类名完成的。为了检索元素,还应该在本机上下文中

    也可以直接在数字选择器上执行,因为它的行为就像编辑文本一样。但我们没有试过

    var els;
    return driver
           .elementsByClassName('android.widget.EditText')
           .then(function (_els) {
               els = _els;
               var el = els[0];
    
               return setDatePickerText(driver, el, month);
           })
           .then(function () {
               var el = els[1];
               return setDatePickerText(driver, el, year);
           });
    

    driver.elementsByClassName("android.widget.EditText").then(function (elements) {
    var promise = elements[0];
    
    return driver.perform(new wd.TouchAction().longPress(promise));
    
    var els;
    return driver
           .elementsByClassName('android.widget.EditText')
           .then(function (_els) {
               els = _els;
               var el = els[0];
    
               return setDatePickerText(driver, el, month);
           })
           .then(function () {
               var el = els[1];
               return setDatePickerText(driver, el, year);
           });
    
    function setDatePickerText(driver, el, text) {
      var pressDuration = 1000; 
    
      var action = (new wd.TouchAction()).press({el: el}).wait(pressDuration).release();
      return driver
           .performTouchAction(action)
           .deviceKeyEvent(67)
           .then(function () {
               return el;
           })
           .setText(text);
    }