永发信息网

怎么样重写appium的findelement

答案:2  悬赏:10  手机版
解决时间 2021-02-07 02:30
  • 提问者网友:孤山下
  • 2021-02-06 01:47
怎么样重写appium的findelement
最佳答案
  • 五星知识达人网友:怙棘
  • 2021-02-06 03:01
怎么个重写法?比如我加一些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))
全部回答
  • 1楼网友:拾荒鲤
  • 2021-02-06 04:36
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.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯