文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Appium Android Bootstrap之控件AndroidElement

2022-06-06 12:55

关注

  通过上一篇文章《Appium Android Bootstrap源码分析之简介》我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的了解,那么按照正常的写书的思路,下一个章节应该要去看bootstrap是如何建立socket来获取数据然后怎样进行处理的了。但本人觉得这样子做并不会太好,因为到时整篇文章会变得非常的冗长,因为你在编写的过程中碰到不认识的类又要跳入进去进行说明分析。这里我觉得应该尝试吸取的《重构》这本书的建议:一个方法的代码不要写得太长,不然可读性会很差,尽量把其分解成不同的函数。那我们这里是用类似的思想,不要尝试在一个文章中把所有的事情都做完,而是尝试先把关键的类给描述清楚,后才去把这些类通过一个实例分析给串起来呈现给读者,这样大家不会因为一个文章太长影响可读性而放弃往下学习了。   那么我们这里为什么先说bootstrap对控件的处理,而非刚才提到的socket相关的socket服务器的建立呢?我是这样子看待的,大家看到本人这篇文章的时候,很有可能之前已经了解过本人针对uiautomator源码分析那个系列的文章了,或者已经有uiautomator的相关知识,所以脑袋里会比较迫切的想知道究竟appium是怎么运用了uiautomator的,那么在appium中于这个问题贴切的是appium在服务器端是怎么使用了uiautomator的控件的。   这里我们主要会分析两个类:   AndroidElement:代表了bootstrap持有的一个ui界面的控件的类,它拥有一个UiObject成员对象和一个代表其在下面的哈希表的键值的String类型成员变量id   AndroidElementsHash:持有了一个包含所有bootstrap(也是appium)曾经见到过的(也是脚本代码中findElement方法找到过的)控件的哈希表,它的key是AndroidElement中的id,每当appium通过findElement找到一个新控件这个id会+1,Appium的pc端和bootstrap端都会持有这个控件的id键值,当需要调用一个控件的方法时需要把代表这个控件的id键值传过来让bootstrap可以从这个哈希表找到对应的控件   1. AndroidElement和UiObject的组合关系   从上面的描述我们可以知道,AndroidElement这个类里面拥有一个UiObject这个变量:   public class AndroidElement {   private final UiObject el;   private String         id;   ...   }   大家都知道UiObject其实是UiAutomator里面代表一个控件的类,通过它能够对控件进行操作(当然终还是通过UiAutomation框架). AnroidElement是通过它来跟UiAutomator发生关系的。我们可以看到下面的AndroidElement的点击click方法其实是很干脆的调用了UiObject的click方法:   public boolean click() throws UiObjectNotFoundException {   return el.click();   }   当然这里除了click还有很多控件相关的操作,比如dragTo,getText,longClick等,但无一例外,都是通过UiObject来实现的,这里不一一列举了。   2. 脚本的WebElement和Bootstrap的AndroidElement的映射关系   我们在脚本上对控件的认识是一个WebElement:   WebElement addNote =  driver.findElementByAndroidUIAutomator("new UiSelector().text("Add note")");   而在Bootstrap中一个对象是一个AndroidElement. 那么它们是怎么映射到一起的呢?我们其实可以先看如下的代码:   WebElement addNote = driver.findElementByAndroidUIAutomator("new UiSelector().text("Add note")");   addNote.getText();   addNote.click();   做的事情是获得Notes这个app的菜单,然后调用控件的getText来获得‘Add note'控件的文本信息,以及通过控件的click方法来点击该控件。那么我们看下调试信息是怎样的:


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯