jsd文档

jsd文档


选择器与节点操作

<p>[TOC]</p> <h1>By选择器</h1> <p>By的所有静态方法返回一个BySelector对象用于查找节点:node = findView(By.text(&quot;JsDroid&quot;).desc(&quot;这是一个按钮&quot;))</p> <h2>clazz 类名</h2> <pre><code class="language-javascript">//clazz节点选择器 By.clazz(&amp;quot;android.widget.TextView&amp;quot;) //正则表达式匹配类名 By.clazz(Pattern.compile(&amp;quot;.*TextView.*&amp;quot;)) </code></pre> <h2>desc 介绍文字</h2> <pre><code class="language-javascript">//全匹配 By.desc(&amp;quot;这是一个按钮&amp;quot;) //包含 By.descContains(&amp;quot;按钮&amp;quot;) //文字开头 By.descStartsWith(&amp;quot;这是&amp;quot;) //文字结尾 By.descEndsWith(&amp;quot;按钮.&amp;quot;) //正则表达式 By.desc(Pattern.compile(&amp;quot;.*按钮.*&amp;quot;))</code></pre> <h2>pkg 包名</h2> <pre><code class="language-javascript">//全匹配 By.pkg(&amp;quot;com.jsdroid&amp;quot;) //正则表达式 By.pkg(Pattern.compile(&amp;quot;com.*&amp;quot;)) </code></pre> <h2>res 资源ID</h2> <pre><code class="language-javascript">//全匹配 By.res(&amp;quot;com.jsdroid:/xxx&amp;quot;) //分解包名与id By.res(&amp;quot;com.jsdroid&amp;quot;,&amp;quot;xxx&amp;quot;) //正则表达式 By.res(Pattern.compile(&amp;quot;.*xxx&amp;quot;)) </code></pre> <h2>text 文字</h2> <pre><code class="language-javascript">//全匹配 By.text(&amp;quot;JsDroid&amp;quot;) //文字包含 By.textContains(&amp;quot;D&amp;quot;) //文字开头 By.textStartsWith(&amp;quot;Js&amp;quot;) //文字结尾 By.textEndsWith(&amp;quot;Droid&amp;quot;) //正则表达式 By.text(Pattern.compile(&amp;quot;.*Droid&amp;quot;)) </code></pre> <h2>index 序号</h2> <pre><code class="language-javascript">By.index(1)</code></pre> <h2>bounds 范围</h2> <pre><code class="language-javascript">By.bounds(1,2,200,300)</code></pre> <h2>checkable 是否可选</h2> <pre><code class="language-javascript">By.checkable(true) </code></pre> <h2>checked 是否选中</h2> <pre><code class="language-javascript">By.checked(true) </code></pre> <h2>clickable 是否可点击</h2> <pre><code class="language-javascript">By.clickable(true) </code></pre> <h2>enabled 是否可操作</h2> <pre><code class="language-javascript">By.enabled(true) </code></pre> <h2>focusable 是否可置焦点</h2> <pre><code class="language-javascript">By.focusable(true) </code></pre> <h2>focused 是否已置焦点</h2> <pre><code class="language-javascript">By.focused(true) </code></pre> <h2>longClickable 是否可以长按</h2> <pre><code class="language-javascript">By.longClickable(true) </code></pre> <h2>scrollable 是否可以滚动</h2> <pre><code class="language-javascript">By.scrollable(true) </code></pre> <h2>selected 是否可以下拉</h2> <pre><code class="language-javascript">By.selected(true) </code></pre> <h2>depth 深度</h2> <pre><code class="language-javascript">//选择根节点 By.depth(0) //选择最小深度1,最大选择5 By.depth(1,5) </code></pre> <h2>hasChild 包含子节点</h2> <pre><code class="language-javascript">By.hasChild(By.text(&amp;quot;JsDroid&amp;quot;)) </code></pre> <h2>hasDescendant 包含节点</h2> <pre><code class="language-javascript">//全搜索 By.hasDescendant(By.text(&amp;quot;JsDroid&amp;quot;)) //限制相对深度搜索 By.hasDescendant(By.text(&amp;quot;JsDroid&amp;quot;),10) </code></pre> <h2>多属性匹配</h2> <pre><code class="language-javascript">By.text(&amp;quot;JsDroid&amp;quot;).desc(&amp;quot;这是一个按钮&amp;quot;).res(&amp;quot;com.jsdroid:/.&amp;quot;)</code></pre> <h2>联级匹配</h2> <pre><code class="language-javascript">//成功返回前面的节点 By.text(&amp;quot;JsDroid&amp;quot;).desc(&amp;quot;这是一个按钮&amp;quot;).res(&amp;quot;com.jsdroid:/.&amp;quot;).hasChild(By.text(&amp;quot;JsDroid&amp;quot;)) //成功返回后面的节点 By.clazz('android.view.ViewGroup').child(By.clazz('android.widget.FrameLayout').child(By.text('系统应用'))).getText() //运行返回:系统应用</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d51dc7f2c0d9f7566cc1aeb20402237e&amp;amp;file=file.png" alt="" /></p> <h1>节点操作</h1> <ul> <li> <p>两种查找节点方法:</p> <ul> <li>方法1: <h2>findView 查找单个节点</h2> <pre><code class="language-javascript">//查找节点文字为JsDroid的节点 node = findView(By.text(&amp;quot;JsDroid&amp;quot;)) if(node!=null){ node.getText() //点击节点 node.click() } //查找单个节点 ,等待5秒 node = waitView(By.text(&amp;quot;JsDroid&amp;quot;)) if(node!=null){ node.getText() //点击节点 node.click() }</code></pre> <h2>findViews 查找获取多个节点</h2> <pre><code class="language-javascript">//查找所有文本节点 nodes = findViews(By.clazz(&amp;quot;android.widget.TextView&amp;quot;)) for(var i=0;i&amp;lt;nodes.size();i++){ //获取节点的文本 var text = nodes.get(i).getText() }</code></pre></li> <li> <p>方法2: 直接使用By中的方法</p> <pre><code class="language-javascript">//查找单个节点 node=By.text(&amp;quot;JsDroid&amp;quot;).getView() //查找单个节点 ,取第3个节点 node=By.text(&amp;quot;JsDroid&amp;quot;).getViewAt(2) //查找单个节点 ,等待5秒 node=By.text(&amp;quot;JsDroid&amp;quot;).getView(5000) //查找单个节点 ,等待5秒,取第3个节点 node=By.text(&amp;quot;JsDroid&amp;quot;).getViewAt(2,5000) //查找获取多个节点 nodes=By.text(&amp;quot;JsDroid&amp;quot;).getViews() //查找获取多个节点,等待5秒 nodes=By.text(&amp;quot;JsDroid&amp;quot;).getViews(5000)</code></pre> <h2>取兄弟节点</h2> <pre><code class="language-javascript">node=By.text('雷电游戏中心').desc('雷电游戏中心').getbrother(-1) if(node){ node.getText() }else{ 取兄弟节点失败' }</code></pre> </li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=13cf87efd1de0df2b48370c384421733&amp;amp;file=file.png" alt="" /></p> </li> </ul> <h2>hasObject 是否存在节点</h2> <ul> <li>方法1: <pre><code class="language-javascript">var r = device.hasObject(By.text(&amp;quot;JsDroid&amp;quot;)); if(r){ //存在 }</code></pre></li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的text r =By.text(&amp;quot;JsDroid&amp;quot;).has(); //等待5秒 r =By.text(&amp;quot;JsDroid&amp;quot;).has(5000); if(r){ //存在 }</code></pre></li> </ul> <h2>getText 获取文字</h2> <ul> <li>方法1: <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ text = node.getText() }</code></pre></li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的text text =By.text(&amp;quot;JsDroid&amp;quot;).getText(); //等待5秒 text =By.text(&amp;quot;JsDroid&amp;quot;).getText(5000); //取第3个节点的text text =By.text(&amp;quot;JsDroid&amp;quot;).getTextAt(2); //等待5秒,取第3个节点的text text =By.text(&amp;quot;JsDroid&amp;quot;).getTextAt(2,5000);</code></pre></li> </ul> <h2>getResourceName 获取res</h2> <ul> <li>方法1: <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ res = node.getResourceName() }</code></pre></li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的res res =By.text(&amp;quot;JsDroid&amp;quot;).getRes(); //等待5秒 res =By.text(&amp;quot;JsDroid&amp;quot;).getRes(5000); //取第3个节点的res res =By.text(&amp;quot;JsDroid&amp;quot;).getResAt(2); //等待5秒,取第3个节点的res res =By.text(&amp;quot;JsDroid&amp;quot;).getResAt(2,5000);</code></pre> <h2>getClassName 获取类名class</h2> <ul> <li>方法1: <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ className = node.getClassName() }</code></pre></li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的class className =By.text(&amp;quot;JsDroid&amp;quot;).getclass(); //等待5秒 className =By.text(&amp;quot;JsDroid&amp;quot;).getclass(5000); //取第3个节点的class className =By.text(&amp;quot;JsDroid&amp;quot;).getclassAt(2); //等待5秒,取第3个节点的class className =By.text(&amp;quot;JsDroid&amp;quot;).getclassAt(2,5000);</code></pre></li> </ul></li> </ul> <h2>getContentDescription 描述文字desc</h2> <ul> <li>方法1: <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ desc = node.getContentDescription() }</code></pre></li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的desc desc =By.text(&amp;quot;JsDroid&amp;quot;).getDesc(); //等待5秒 desc =By.text(&amp;quot;JsDroid&amp;quot;).getDesc(5000); //取第3个节点的desc desc =By.text(&amp;quot;JsDroid&amp;quot;).getDescAt(2); //等待5秒,取第3个节点的desc desc =By.text(&amp;quot;JsDroid&amp;quot;).getDescAt(2,5000);</code></pre></li> </ul> <h2>getVisibleBounds 获取可见范围bounds</h2> <ul> <li> <p>方法1:</p> <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ bounds = node.getVisibleBounds() print(bounds.left) print(bounds.top) print(bounds.right) print(bounds.bottom) }</code></pre> </li> <li>方法2: <pre><code class="language-javascript">//取匹配节点的bounds bounds =By.text(&amp;quot;JsDroid&amp;quot;).getRect(); //等待5秒 bounds =By.text(&amp;quot;JsDroid&amp;quot;).getRect(5000); //取第3个节点的bounds bounds =By.text(&amp;quot;JsDroid&amp;quot;).getRectAt(2); //等待5秒,取第3个节点的bounds bounds =By.text(&amp;quot;JsDroid&amp;quot;).getRectAt(2,5000);</code></pre></li> </ul> <h2>click 点击节点</h2> <ul> <li> <p>方法1:</p> <pre><code class="language-javascript">var node = findView(By.text(&amp;quot;JsDroid&amp;quot;)); if(node){ node.click() }</code></pre> </li> <li> <p>方法2:</p> <pre><code class="language-javascript">//点击节点 result =By.text(&amp;quot;JsDroid&amp;quot;).click(); //等待5秒 result =By.text(&amp;quot;JsDroid&amp;quot;).click(5000); //点击第3个节点 result =By.text(&amp;quot;JsDroid&amp;quot;).clickAt(2); //等待5秒,点击第3个节点 result =By.text(&amp;quot;JsDroid&amp;quot;).clickAt(2,5000);</code></pre> <h2>获取父节点</h2> <p><code>node = node.getParent() </code></p> <h2>取子节点数量</h2> <p><code>count = node.getChildCount() </code></p> <h2>取子节点集合</h2> <p><code>childList = node.getChildren() </code></p> <h2>是否包含节点</h2> <p><code>node.hasObject(By.text(&amp;quot;JsDroid&amp;quot;)) </code></p> <h2>查找节点</h2> <pre><code class="language-javascript">//查找单个 n = node.findObject(By.text(&amp;quot;JsDroid&amp;quot;)) //查找多个 n = node.findObjects(By.text(&amp;quot;JsDroid&amp;quot;)) </code></pre> <h2>获取中心点</h2> <pre><code class="language-javascript">point = node.getVisibleCenter() print(point.x) print(point.y) </code></pre> <h2>获取所属app的pkg</h2> <pre><code class="language-javascript">pkg = node.getApplicationPackage() print(pkg) </code></pre> <h2>是否可以选择</h2> <pre><code class="language-javascript">node.isCheckable() </code></pre> <h2>是否已选择</h2> <p><code>node.isChecked() </code></p> <h2>是否可点击</h2> <p><code>node.isClickable() </code></p> <h2>是否可操作</h2> <p><code>node.isEnabled() </code></p> <h2>是否可聚焦</h2> <p><code>node.isFocusable() </code></p> <h2>是否已聚焦</h2> <p><code>node.isFocused() </code></p> <h2>是否可以长按</h2> <p><code>node.isLongClickable() </code></p> <h2>是否可以滑动</h2> <p><code>node.isScrollable() </code></p> <h2>是否被选择</h2> <p><code>node.isSelected() </code></p> <h2>清空文字</h2> <p><code>node.clear() </code></p> <h2>拖动</h2> <pre><code class="language-javascript">//将节点拖动到100,100的位置 node.drag(new android.graphics.Point(100,100)) //将节点拖动到100,100的位置,速度100 node.drag(new android.graphics.Point(100,100),100) </code></pre> <h2>长按</h2> <p><code>node.longClick() </code></p> <h2>捏紧手势</h2> <pre><code class="language-javascript">//捏紧80% ,默认速度2500*density node.pinchClose(0.8) //捏紧80%,速度1000 node.pinchClose(0.8,1000) </code></pre> <h2>捏开手势</h2> <pre><code class="language-javascript">//捏开80%,默认速度2500*density node.pinchOpen(0.8) //捏开80%,速度1000 node.pinchOpen(0.8,1000) </code></pre> <h2>滑动</h2> <pre><code class="language-javascript">//向左滑动80%,默认速度2500*density node.swipe(Direction.LEFT, 0.8) //向右滑动 node.swipe(Direction.RIGHT, 0.8) //向上滑动 node.swipe(Direction.UP, 0.8) //向下滑动 node.swipe(Direction.DOWN, 0.8) //向左滑动80%,速度1000 node.swipe(Direction.LEFT, 0.8,1000) </code></pre> </li> </ul> <h2>滚动手势</h2> <pre><code class="language-javascript">//向左滚动80%,默认速度5000*density node.scroll(Direction.LEFT,0.8) //向左滚动80%,速度1000 node.scroll(Direction.LEFT,0.8,1000) </code></pre> <h2>快速滚动</h2> <pre><code class="language-javascript">//快速向左滚动,默认速度7500*density node.fling(Direction.LEFT) //快速向左滚动,速度1000 node.fling(Direction.LEFT,1000) </code></pre> <h2>模拟按键输入文字(不支持汉字)</h2> <p><code>node.legacySetText(&amp;quot;text&amp;quot;) </code></p> <h2>节点输入文字</h2> <p><code>node.setText(&amp;quot;文字内容&amp;quot;) </code></p> <pre><code class="language-javascript">//输入文字 By.clazz('android.widget.EditText').setText(&amp;quot;文字内容&amp;quot;) //第2个节点输入文字 By.clazz('android.widget.EditText').setText(&amp;quot;文字内容&amp;quot;,1) </code></pre>

页面列表

ITEM_HTML