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



我们有一个使用 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

任何帮助,不胜感激。提前谢谢。

代码

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

解释

分解它,

1.

query "UIWebView",

获取 Web 视图。

阿拉伯数字。

:calabashStringByEvaluatingJavaScript => ...

这是一个选择器,calabash-ios-server添加到webviews,以便任何webview(UIWebView或WKWebView)都应该响应它。根据结果调用选择器query "UIWebView"

3.

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

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

我意识到将文本作为对象的一部分返回会很好,我会与团队核实,看看我们是否应该提交问题(或者,随时在 https://github.com/calabash/calabash-ios-server/issues 自己提交一个问题)。

多亏了@christoper,我找到了一些适用于 android 的工作解决方案。

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

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

相关内容

  • 没有找到相关文章

最新更新