写在前面
本文讲述的是【如何给动态生成的控件添加id】,像那种直接在xml配置id的高级操作,我是介绍不来的,请见谅。不需要前戏的朋友,请直接查看第四点
一、背景
自从公司使用【appium】做自动化测试以后,别提测试组的同事有多高兴了,给人一种【妈妈再也不用担心我按坏公司的设备,赔不起钱了】的既视感。(ps:公司的设备是以 W 为单位的)
1、简单介绍自动化测试
【appium】简单来说就是一个自动化测试的工具,和其他自动化测试工具操作流程一致:
(1)根据控件id或者text等属性来定位到控件
(2)然后模拟触发一些点击,滑动等事件
(3)根据预期的结果和实际的结果做比较,得出结论
二、翻车现场
在了解了自动化测试的基本流程后,就知道自动化测试前题是【定位到具体的控件】,因此我需要给所有的控件【添加对应的id】。在一顿猛如虎的操作后,排查了所有没带id的控件后,我把打包好apk(没问题.apk)给测试组同事做测试,并说道【可以了,有问题过来找我,不过应该没什么问题的】。
····陷入摸鱼状态中,无法自拔····
【老哥,你的这个控件没有id呢】猛的把我从鱼塘中拉回来,心里碎碎念道“我那才吃过一口的老干妈怎么还没人购买,这还是99新的呢”。
【不应该啊,我刚刚都排查了一遍,我看看】。又是一波疯狂输出后,纳尼,居然是[onClick]的锅,原来是某些[Button],当初设置点击事件时,采用的【在xml文件添加onClick属性的方法,怪不得没有id,我还能在界面上点击】
【问题不大,马上就好】于是我又排查了一遍带onClick的button后,把第二个apk(绝对没问题.apk)发了他,并写到【这次改完后绝对没问题了,有问题你也别来找我了,我去找你吧】
····我那喝过一口的冰阔乐怎么还没人买,才0.5元啊,咸鱼真不好做····
“咳咳咳..电脑OA传来一阵通知声音”,是刚刚的测试同事发来的信息【过来】
?????!!!!!!
就两个字,什么时候测试的朋友也这么大架子了!!!!!
不就平时写的bug有点多,让你们跟着加班十几次而已!!!!
起身过去,手上默默拿起“50cm长的戒尺”(这把尺子说来话长,不为人知的1cm,一把辛酸泪,有机会再描述)
我:【请问有什么问题?】(你们以为我会态度不好,不可能的,我是经过专业素养培训的,一般都会礼貌待人,不会爆粗,除非真的忍不住)
测试:【这里有一排的按钮没有id】
我:【一排?不可能吧,我看看】
测试:【把界面截图,以及对应的控件详细属性界面显示给我看】
我:【我c,真的没有,还是一排。那这个应该是列表控件,列表控件的每一个item都是没有id的,这是正常的】
测试:【不是吧,最外层这个是LinearLayout,又不是RecyclerView或者ListView,你别坑我】
我:【我c,现在的测试,对android基础知识掌握这么熟的吗?是想抢饭碗吗?心里是这么想着,嘴上只能说者‘额,那我回去看看吧’】
三、分析处理问题
1、缺少id的原因
放下戒尺,乖乖地去到指定界面的xml布局,查看,发现真的是LinearLayouer,但是并没有看到里面有嵌套什么Button,textView,ImageView之类的控件。然后跳转到指定.java文件,发现是通过new Button(context),然后addView到LinearLayout上面的,我滴乖乖
2、解决缺少id的问题
(1)我想将这些动态添加的button,通过xml布局的方式,移动到LinearLayout的标签下面,并且给这些button添加id。但想法是好的,现实是残忍的,项目中之所以用动态添加的方式,就是因为【这些按钮是需要根据xml配置文件进行配置的,说白了,就是这些按钮是根据xml的不同,动态变化的】(ps:通过xml配置,动态生成按钮的思路,下次有机会再解释)
(2)既然无法通过xml布局文件的方式来处理,就只能给每个按钮动态添加id了。通过api文档,发现有一个setId的方法,里面传入一个int类型的参数,但是这个id从哪里来呢,随便输入1.2,3,4吗?好像随意了点。根据平时的用法,id都是R.id.xxx这种形式的,并以此类推R.color.xxx,R.string.xxx,R.drawable.xxx等,得到以下三部曲(这个三部曲是不是来的有点容易了??)
四、简单三部曲
1、单独创建id类型的资源文件
2、自定义id值
3、使用自定义的id值
需要注意的是,第一点不是必须的。自定义的id值,你可以定义在string.xml,或者是color.xml 文件中。我之所以单独创建ids.xml文件,仅仅是为了资源分类合理,养成良好的编码习惯,不被同事喷,不被上司怼,赏心悦目等等等等。
五、结束语
我把最后打包的apk(有问题你砍我.apk)发给了测试同事,并顺道留下一句话【给我往死里测】,然后默默把OA,QQ,微信下线了。
下班钟声响起,【这一天,终究是愉悦的,我的努力也得到了回报,我的老干妈和冰阔乐顺利被一个抠脚大汉给回收了,感谢!!!】
至于测试还有没有问题,那是明天的事了,再见!!!