Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
R
ratel-doc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ratel
ratel-doc
Commits
463cd5e1
Commit
463cd5e1
authored
Feb 08, 2020
by
Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update doc for superAppium
parent
b204340e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
0 deletions
+36
-0
7.ratelExtension.md
7.ratelExtension.md
+36
-0
No files found.
7.ratelExtension.md
View file @
463cd5e1
...
...
@@ -115,3 +115,39 @@ public class MainActivityPageHandler implements PageTriggerManager.ActivityFocus
由刚才的demo可以看到我们操作界面元素的时候出现了一个
``ViewImage``
,这个即是SuperAppium在Android原生dom上面构建的一层关于DOM tree的抽象模型,他反应的是一个树形结构,包括当前节点的属性、当前节点名称、当前节点的子节点等常规tree mode的概念。同时也有sbling,parent,attribute等系列dom操作相关函数。
ViewImage本身提供树形结构抽象,但是不提供attribute定义。所以在ViewImage底层,存在一个XMode模块,它实现了每个View类型有哪些属性的功能抽象。比如
``android.widget.TextView``
将会有
``text``
属性,使用者可以自行扩展,对应的中控函数见:
``com.virjar.ratel.api.extension.superappium.xmodel.ValueGetters``
#### XPATH
我们单独为SuperAppium设计了Xpath模块,支持Xpath1.5语法。叫他Xpath1.5的原因是,Ratel设计的Xpath并不完全支持Xpath2.0,主要体现在Xpath 2.0的XmlNamespace并不支持。不过显然namespace对于我们的TreeModel并没有任何意义。
``ViewImage``
本身就有一些Xpath相关的函数,看到名字可能你就知道如何使用xpath了。如:
``xpath``
,
``xpath2String``
,
``xpath2One``
,
``clickByXpath``
,
``typeByXpath``
。
Xpath本身改造我之前外爬虫设计的一套xpath框架
[
SipSoup
](
https://gitee.com/virjar/sipsoup
)
这个框架设计的时候我大概大学毕业第一年,所以其实有部分代码看起来还是比较稚嫩,在Ratel的RodeMap中还是会对这个模块进行重构。所以XPath语法可以参考SipSoup,以及Xpath语法扩展也可以参考SipSoup。
#### webview自动化
WebView中是一个html环境,Android的DomTree无法感知到WebView的Tree结构,类似Appium在处理WebView的时候需要切换Context一样,在SuperAppium中护理WebView也需要有些特殊调用
```
java
WebView
webView
=
root
.
findWebViewIfExist
();
if
(
webView
==
null
)
{
Log
.
i
(
HookEntry
.
TAG
,
"无法定位登陆WebView..."
);
return
false
;
}
WebViewHelper
.
JsCallFuture
jsCallFuture
=
new
WebViewHelper
(
webView
).
typeByXpath
(
"//input[@data-componentname='phoneNumber']"
,
GrabTaskBean
.
userName
);
jsCallFuture
.
success
()
.
typeByXpath
(
"//input[@data-componentname='password']"
,
GrabTaskBean
.
password
)
.
clickByXpath
(
"//input[@type='button' and @value='登录']"
);
jsCallFuture
.
failed
(
new
WebViewHelper
.
OnJsCallFinishEvent
()
{
@Override
public
void
onJsCallFinished
(
String
callResultId
)
{
PageTriggerManager
.
trigger
(
400
);
}
});
```
WebView的自动化控制主要依靠
``com.virjar.ratel.api.extension.superappium.WebViewHelper``
,他系统一系列方便的自动化点击函数,也是对Xpath的一些包装。不过这个模块还处于beta阶段,某些js对抗场景卡能不是特别好使
#### demo
关于自动化点击的demo,可以参考
[
http://git.virjar.com/ratel/ratel-demo/tree/master/crack-snkrs
](
http://git.virjar.com/ratel/ratel-demo/tree/master/crack-snkrs
)
demo仅仅实现SuperAppium控制原生元素和控制Webview的功能演示。(申明:这里只是随便找了一个app进行功能演示,并没有真的对对应app进行批量攻击测试,如果app所有者觉得这个demo不是很合适,我们将会对他进行删除)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment