Purus
Purus

Reputation: 5819

Unable to get text value in hybrid app using Calabash

We have a hybrid app built using Cordova and it has a login user and password field. The applicatio is developed based on EmberJs stack. We are using Calabash 1.* version and other components works fine except all text boxes.

I am able to successfully query the input elements using the below code in console.

query("systemWebview css:'input'")

I get the below query result in console. But text value is always empty even if I enter some value.

{
            "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"
  },

In the Ruby section, I have the below code and it also returns empty value.

query(objectName, :textContent).first

Any help is appreciated. Thanks in advance.

Upvotes: 0

Views: 613

Answers (2)

Purus
Purus

Reputation: 5819

Thanks to @christoper, I found some working solution for android.

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

The same logic works for checkbox validation too.

Upvotes: 0

Christopher Fuentes
Christopher Fuentes

Reputation: 311

Code

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

Explanation

Breaking it down,

1.

query "UIWebView",

Gets the webview.

2.

:calabashStringByEvaluatingJavaScript => ...

This is a selector which calabash-ios-server adds to webviews such that any webview (UIWebView or WKWebView) should respond to it. The selector is invoked on the result of query "UIWebView"

3.

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

This is a standard javascript selector that you can tweak as necessary to get your element. E.g., you could use document.getElementById() or whatever is most convenient. This string of javascript is used as an argument to the calabashStringByEvaluatingJavaScript selector.

I realize it would be nice to have the text just returned as part of the object, I'll check with the team and see if we should file an issue (or, feel free to file one yourself at https://github.com/calabash/calabash-ios-server/issues ).

Upvotes: 2

Related Questions