永发信息网

怎么样重写appium的findelement

答案:2  悬赏:10  手机版
解决时间 2021-02-07 02:30
怎么样重写appium的findelement
最佳答案
怎么个重写法?比如我加一些log和超时等待这样,然后自动点击?
    def find_element_by_id_and_tap(self, eleid, timeout=300):
        self.logger.info(u"设备:%s start tap element id:%s" % (self.device.devicename, eleid))
        if self.wait_element_id_display(self.driver, eleid, eleid, timeout):
            element = self.driver.find_element_by_id(eleid)
            self.action.tap(element).perform()
            self.logger.info(u"设备:%s tap element id:%s success" % (self.device.devicename, eleid))
全部回答
appiumdriver的各种findelement方法的尝试,尝试的目标应用是sdk自带的notepad应用。 1. findelementbyname 1.1 示例 el = driver.findelementbyname("add note");        assertthat(el.gettext(),equalto("add note")); 1.2 如何获得name 安卓设备没有找到适合的方法,尝试用appium inspector, 但是使用了当前最新的“appiumforwindows-1.2.3.1”没有看到这个属性,且inspector在windows下面非常的不稳定,很容易crash 。真心期望appium团队尽快解决这个问题 ios设备倒可以用appium inspector获得(以下图片来自网上) 1.3 建议 个人建议可以尝试先用view显示的文本作为name看是否能拿到该控件,按照我个人的经验一般都是会成功的, 所以我很怀疑安卓上面控件的name是否就等于text 。如果确实还是不行的话就只好放弃用name了。或者等待appium后来的稳定的inspector发布后看是否可以获得控件的name。 这个方法在appium1.0之后其实已经过时而要被findelementbyaccessibilityid取代得了,不知道为什么还能调用,猜想是appium团队想保留一定的兼容性以平滑过度吧。请查看: https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md 2. findelementbyandroiduiautomator 2.1 示例 el = driver.findelementbyandroiduiautomator("new uiselector().text(\"add note\")");        assertthat(el.gettext(),equalto("add note")); 2.2 如何获得uiautomator参数 uiautomator获取控件的方式多种多样,都是通过uiselector对象来去查找,比如使用view的text文本去当前窗口查找控件,这里不做累述,往后会另起一篇文章来描述uiautomator获取控件的方式,到时直接套用进来就可以了。 3. findelementbyclassname 3.1 示例 el = driver.findelementbyclassname("android.widget.textview");        assertthat(el.gettext(),equalto("add note")); 3.2 如何获得控件的classname 可以使用uiautomatorviewer工具直接查看 3.3 建议 使用classname一般获得的view都不止一个,所以应该需要遍历一遍得到的views,然后缩写搜索条件来获得目标控件。示例中因为只有一个textview控件在窗口上面,所以不需要遍历。 4. findelementbyid 4.1 示例 el = driver.findelementbyid("android:id/title");        assertthat(el.gettext(),equalto("add note")); 4.2 如何获得resource id 可以通过uiautomatorviewer获得 4.3 建议 如果目标设备的api level低于18则uiautomatorviewer不能获得对应的resource id,只有等于大于18的时候才能使用。 5. findelementbyaccessibilityid 5.1 示例 el = driver.findelementbyaccessibilityid("menu_add_note_description");     assertthat(el.gettext(),equalto("node")); 5.2 如何获得accessibilityid 可以通过uiautomatorviewer或者appium inspector获得 5.3 注释 accessibility id在android上面就等同于contentdescription,这个属性是方便一些生理功能有缺陷的人使用应用程序的。比如我们有一个imageview里面放置一张颜色复杂的图片,可能一些色弱色盲的人,分不清这张图片中画的是什么东西。如果用户安装了辅助浏览工具比如talkback,talkback就会大声朗读出用户目前正在浏览的内容。textview控件talkback可以直接读出里面的内容,但是imageview talkback就只能去读contentdescription的值,告诉用户这个图片到底是什么。 鉴于这是一个隐藏属性,而android上用于查找控件的各种属性可能有所缺失或者有重复(比如id重复,比如一个list下面的所有项可能都是叫做“id/text1”),所以最佳的办法就是跟开发团队沟通好每个view都赋予一个唯一的contentdescription。 6. findelementbycssselector tbd , 这个方法应该是针对webview容器下面的控件定位的,因为现在针对的是native app暂时还没有用到,所以先标记下,今后需要的时候加上去。 7. findelementbylinktext tbd , 这个方法应该是针对webview容器下面的控件定位的,因为现在这很对的是native app暂时还没有用到,所以先标记下,今后需要的时候加上去。 8. findelementbypartiallinktext tbd , 这个方法应该是针对webview容器下面的控件定位的,因为现在这很对的是native app暂时还没有用到,所以先标记下,今后需要的时候加上去。 9.findelementbytagname 这个方法appium1.0以后已经过时并被以上的findelementbyclassname取代了 ,请查看 https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md 10.findeelementbyxpath 10.1 示例 el = driver.findelementbyxpath("//android.widget.textview[contains(@text,'add note')]");        //el = driver.findelement(by.xpath("//android.widget.textview"));        assertthat(el.gettext(),equalto("add note")); 10.2 xpath格式变化 从老版本的appium0.18.x升级到现在的appium1.x后,注意class name和xpath策略的变化:你现在需要使用fqcn来描述你的控件。 也就是说原来的: findelementbyxpath(""//textview[contains(@text,'add note')]"") 需要改成 findelementbyxpath("//android.widget.textview[contains(@text,'add note')]") 详细变动请查看 《 appium0.18.x迁移到appium1.x须知事项 》 10.3参考 据说不是很稳定: https://github.com/appium/appium/issues/3371 bootstraponline commented  on 13 aug sometimes uiautomator fails to create the dump.xml. a client side retry may help. i don't think there's much we can do about the problem until google fixes uiautomator. 11. 终极方法:appiumdriver getpagesource 最后介绍appiumdriver的getpagesource函数,可以把当前页面的元素以xml的方式打印出来,建议大家在找不到view的相应属性的时候就调用该函数来慢慢查找了^_^ 1.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
水上森林地址好找么,我有些事要过去
房贷这个月金额不足怎么办会有黑名单吗
天钟洞地址有知道的么?有点事想过去
志聪煎包地址在哪,我要去那里办事
有什么好办法找到我的十多年前的同学
鸳鸯湖怎么去啊,我要去那办事
用RE管理器修改Mac,Mac是在RE管理器的什么位
为什么说molde canticle是西西里的美丽传说的
百强水牛奶在哪里啊,我有事要去这个地方
【tend】tend用法意思
感谢朋友的祝福语
中国天眼地址在什么地方,我要处理点事
隔溪这个地址在什么地方,我要处理点事
马岭河峡谷漂流怎么去啊,我要去那办事
【风鸡】蒸制风鸡的调料主要有葱、姜和()。
推荐资讯
柜机空调只移内机怎么移机
寻乌爱婴岛母婴用品店南桥分店在什么地方啊,
送妈妈护肤品 求推荐
鑫腾平价超市地址有知道的么?有点事想过去
金鑫科技苑地址有知道的么?有点事想过去
中国体育彩票(查干淖尔北街与查干淖尔南街交
南京市教育局编的《我的成长脚印》哪儿有卖?
邓州市南阳一家人饭店地址在哪,我要去那里
雅园宾馆(许昌长葛市)地址有知道的么?有点事
【集市与商城的评价体系有什么区别】以下哪类
请问手机的HIFI音质是不是仅限于手机的扬声器
普阳农场砖瓦队地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?