无法使用Calabash在混合应用中获取文本值

时间:2016-02-05 09:26:33

标签: calabash calabash-android

我们有一个使用Cordova构建的混合应用程序,它有一个登录用户和密码字段。该应用程序是基于EmberJs堆栈开发的。我们正在使用Calabash 1. *版本和其他组件工作正常,除了所有文本框。

我能够使用控制台中的以下代码成功查询输入元素。

query("systemWebview css:'input'")

我在控制台中获得以下查询结果。但即使我输入一些值,文本值也总是空的。

{
            "class" => "ember-view ember-text-field",
         "nodeType" => "ELEMENT_NODE",
               "id" => "ember555",
      "textContent" => "",
             "html" => "<input id=\"ember555\" class=\"ember-view ember-tex
ld\" placeholder=\"Enter User name\" type=\"text\">",

             "rect" => {

                 "y" => 202,

                 "x" => 0,

          "center_x" => 360,

            "height" => 74,

             "width" => 720,

               "top" => 76,

              "left" => 0,

          "center_y" => 238

      },

         "nodeName" => "INPUT",

          "webView" => "NoResourceEntry-100"
  },

在Ruby部分中,我有以下代码,它也返回空值。

query(objectName, :textContent).first

感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

代码

query "UIWebView", :calabashStringByEvaluatingJavaScript => "document.querySelectorAll('input#ember555')[0].value"

说明

分解,

1

query "UIWebView",

获取webview。

2

:calabashStringByEvaluatingJavaScript => ...

这是calabash-ios-server添加到webview的选择器,任何webview(UIWebView或WKWebView)都应该响应它。在query "UIWebView"

的结果上调用选择器

3

"document.querySelectorAll('input#ember555')[0].value"

这是一个标准的javascript选择器,您可以根据需要进行调整以获取元素。例如,您可以使用document.getElementById()或其他最方便的方法。此字符串的javascript用作calabashStringByEvaluatingJavaScript选择器的参数。

我意识到将文本作为对象的一部分返回会很好,我会与团队核实,看看我们是否应该提出问题(或者随意在{{{ 3}})。

答案 1 :(得分:0)

感谢@christoper,我找到了一些适用于Android的解决方案。

evaluate_javascript("systemWebView", "return document.getElementById('nicknameid').value;")

同样的逻辑也适用于复选框验证。