【问题标题】:Appium: Change Android DatePicker value Javascript/NodeJSAppium:更改 Android DatePicker 值 Javascript/NodeJS
【发布时间】:2015-08-25 21:30:30
【问题描述】:

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

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

  1. 直接使用 sendKeys() 设置文本;
  2. 然后先选择所有文字再设置文字

使用第一个选项 appium 告诉我们无法完全删除文本(使用 appium 1.4.0,sendKeys 应该清除编辑文本)。相反,前 2 个字符被删除,我们被字符“n.”卡住了。我们还尝试在数字选择器上设置文本(通过使用 sendKeys())(更改为 android.widget.EditText -> android.widget.NumberPicker)。

driver.elementsByClassName("android.widget.EditText").then(function (promisses) {
    var promise = promisses[0];
    return promise.sendKeys('May').setImplicitWaitTimeout(3000);
});

对于第二个选项,我们尝试使用触摸动作 (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);
});

driver.elementsByClassName("android.widget.EditText").then(function (elements) {
var promise = elements[0];

return driver.perform(new wd.TouchAction().longPress(promise));

});

我们也尝试过改变上下文。为了检索元素,我们需要 NATIVE 上下文,但要确保我们还尝试了 WEBVIEW 上下文并在两者之间进行切换。

【问题讨论】:

    标签: javascript android node.js datepicker appium


    【解决方案1】:

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

    1. 长按选择文本(var 操作)
    2. 使用按键事件 (deviceKeyEvent(67)) 删除文本
    3. 设置你想要的文本(setText(text)/sendKeys(text))

    通过 android 'android.widget.EditText' 上的类名检索编辑文本元素。为了检索元素,您还应该在 Native 上下文中。

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

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多