autojs,gesture函数的简单应用,parent(),child()的简单应用讲解。(钉钉打卡)

如果不知道autojs和vscode的用处请看上一个博客。

click:clickable(控件信息会告诉我们)

1.当click为false,该如何点击控件以达到我们的目的。

click为false,没有办法直接点击图标
或许再平常我们点击工作台或者四个小方块,你会觉的这也能够点击。
这是什么原因导致的呢?
我们先用VScode返回一下这个控件的属性
在这里插入图片描述
这时候我们可以看到这个text(“工作台”)的属性中clickable为false;
这时候想要达到你想要的效果就需要这个控件中的布局层次进行分析。
在这里插入图片描述

在这里插入图片描述
我们可以看到这个灰灰的就是我们所点击进行分析的控件。
而以Relative开头的控件包括着这两个控件。我们对大的控件进行分析
在这里插入图片描述
可以看到它的clickable为ture是可以点击的,所以我们平常点击都是点击到我们这个大的控件。

id("home_bottom_tab_text").text("工作台").findOne().parent().click();

这样就可以点击到工作台了。
当然以坐标模式进行点击的话也可以,似乎也更加方便,但是开发的话要考虑实用性,一个手机一个样子屏幕分辨率尺寸不同,很大几率会得不到想要的效果。

2.parent(),child().的应用。

parent(),在我们上边点击工作台时候用到了。
为什么不直接用外边的大框架进行点击呢?
因为我们确定一个控件主要由id text desc classname等。
在这里插入图片描述
而工作台这个控件的父级的id 跟他的同级(兄弟)是一样的没办法确定下来。所以需要通过信息更加详细的child进行确定。然后进行点击。
parent()
返回 {UiObject}返回的是一个ui界面的object(对象)
返回该控件的父控件。如果该控件没有父控件,返回null。
child() 一个父级可以拥有多个child。
child(i)
i {number} 子控件索引
返回 {UiObject}
返回第i+1个子控件。如果i>=控件数目或者小于0,则抛出异常。
需要注意的是,由于布局捕捉的问题,该函数可能返回null,也就是可能获取不到某个子控件。
遍历子控件的示例:
var list = className(“AbsListView”).findOne();
for(var i = 0; i < list.childCount(); i++){
var child = list.child(i);
log(child.className());
}
child()就像一个拥有很多房间的大房子,每一个child呆在一个房间。如果想要查找某一个child,就想查房间一样给出child的信息就行了。

下面为大致代码(就我们钉钉打卡而言)

// 主要是一些简单的控件点击
text("钉钉").findOne().click();
sleep(2000);
id("home_bottom_tab_text").text("工作台").findOne().parent().click();
sleep(100);
text("员工健康").findOne().click();
sleep("300");
text("今天").depth(20).findOne().parent().parent().click();
sleep(1500)
className("android.view.View").text("获取").findOne().click();
sleep(300);
className("android.view.View").text("点击签名").findOne().click();
sleep(100);
gestures([1000, [170, 1683], [680, 2000]])
sleep(1000);
className("android.widget.Image").text("plus").findOne().click();
sleep(1000);
id("album_item_media_cbx_icon").desc("未选中").findOne().click();
id("btn_send").findOne().click();
sleep(1500);
className("android.widget.RadioButton").text("绿卡").findOne().click();
sleep(200);
className("android.widget.Button").text("确定").findOne().click();
sleep(100);
className("android.widget.Button").text("提交").findOne().click();
sleep(1000);
home();

由于我们打卡需要签名

我这个地方xue微有点敷衍了(哈哈~~~)
主要用到的方法为gesture
gesture(duration, [x1, y1], [x2, y2], …)
duration {number} 手势的时长
[x, y] {…} 手势滑动路径的一系列坐标
模拟手势操作。例如gesture(1000, [0, 0], [500, 500], [500, 1000])为模拟一个从(0, 0)到(500, 500)到(500, 100)的手势操作,时长为2秒。

根据个人需要进行改变。

我们同时也用到了上传行程卡

这就简单提一下截图并且保存到手机中

// 
function 截图(){
    threads.start(function () {
        var beginBtn;
        if (beginBtn = classNameContains("Button").textContains("允许").findOne(2000)) {
            beginBtn.click();
        }
    });
    if (!requestScreenCapture()) {
        toast("请求截图失败");
        exit();
    }
    sleep(2000);
    captureScreen("/sdcard/img.png");
}

前几行解决了autojs截图是需要进行允许,我的手机提示框是允许根据自己改变。
以上大部分就已经可以进行一个简单打卡,我碰到的太复杂的我就舍弃了,因为也是自己用所以没有弄那么麻烦,比如获得行程卡截图需要打开vx 或者支付宝,需要输入密码,写好了但是太麻烦,不简洁所以就没有引用。代码要比较简洁才是王道。完结撒花!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值