无法使用 Calabash 在混合应用程序中获取文本值
Unable to get text value in hybrid app using 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 部分,我有以下代码,它也是 returns 空值。
query(objectName, :textContent).first
感谢任何帮助。提前致谢。
代码
query "UIWebView", :calabashStringByEvaluatingJavaScript => "document.querySelectorAll('input#ember555')[0].value"
说明
分解,
1.
query "UIWebView",
获取网络视图。
2.
: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;")
同样的逻辑也适用于复选框验证。
我们有一个使用 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 部分,我有以下代码,它也是 returns 空值。
query(objectName, :textContent).first
感谢任何帮助。提前致谢。
代码
query "UIWebView", :calabashStringByEvaluatingJavaScript => "document.querySelectorAll('input#ember555')[0].value"
说明
分解,
1.
query "UIWebView",
获取网络视图。
2.
: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;")
同样的逻辑也适用于复选框验证。