appium元素定位问题

来源:互联网 发布:淘宝购物后红包怎么领 编辑:程序博客网 时间:2024/05/21 21:44

appium元素定位问题

从上一篇中我们知道了如何利用代码启动app

对于元素定位问题一共有两种方式,一种是原生谷歌框架进行定位,这种方式是最基本的定位方式。
另一种是通过html元素进行定位,这种方式非常方便,但对于没有用html写的app则不能用这种方式。


元生谷歌框架定位方式


  1. 我们将手机和电脑连接并且设置成调试模式,然后找到进入 sdk > tools > bin 然后找到 uiautomatorviewer.bat 双击。


  2. 进入界面后点击下图步骤一中的随便一个按钮 (那个定位不好换哪个),然后获取屏幕截图后,加我我们需要点击元素为 1 ,则可选择 text,resource-id,class,content-desc 等方式先定位元素,然后操作。
    这里写图片描述




上图对应的元素和对应的操作分别为:

显示名 对应属性 python定位代码 text name driver.find_element_by_name() resource-id id driver.find_element_by_id() class classname driver.find_element_by_class_name() content-desc accessibility_id driver.find_element_by_accessibility_id()



所以我们需要定位 1 时,我们查找 resource-id 对应的名称是 id 内容: com.miui.calculator:id/btn_1
定位代码及其操作:

driver.find_element_by_id(“com.miui.calculator:id/btn_1”).click()





通过html元素进行定位


  • 首先我们需要翻墙,通过蓝灯软件,或者其他方式。点击进入蓝灯网页,然后登陆谷歌能够浏览,说明翻墙成功。

蓝灯软件可能也被墙了,可以选择找一个正规网站下载他们已经下载好了的蓝灯下载。

  • 然后打开Chrome浏览器在地址栏中输入chrome://inspect回车,并且在手机上打开需要测试的软件,并刷新Chrome,可以看到WebView如下图所示:

这里写图片描述



点击 图中inspect进入,元素定位时,首选点击画红圈包围的图标,然后移动到想要定位的元素上单机。后边元素定位和 web端元素定位一样。
这里写图片描述




但是进行此方式时,首先我们需要将driver改变成WebView方式,之后才能使用此方式。
所以,以下是具体代码实现:

from appium import webdriverimport timedesired_caps = {}desired_caps['device'] = 'android'desired_caps['platformName'] = 'Android'desired_caps['browserName'] = ''desired_caps['version'] = '6.0.1'desired_caps['deviceName'] = 'ba682d20'desired_caps['unicodeKeyboard'] = 'True'desired_caps['resetKeyboard'] = 'True'#desired_caps['app'] = PATH('D:\\UdihuoV2.7.0.apk')desired_caps['appPackage'] ='com.yonyou.Uorder'desired_caps['appActivity'] ='io.dcloud.PandoraEntry'desired_caps['appWaitActivity'] ='io.dcloud.PandoraEntryActivity'desired_caps['newCommandTimeout'] = '3600'driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)time.sleep(4)eles = driver.contextsfor i in eles:    print(i)driver.switch_to.context("WEBVIEW_com.yonyou.Uorder")driver.find_element_by_css_selector("[class='welcomescreen-closebtn close-welcomescreen']").click()




代码解释

将所有的能转换的模式都储存在 eles 中

eles = driver.contexts

转换成WebView模式

driver.switch_to.context(“WEBVIEW_com.yonyou.Uorder”)

进行元素定位并且进行click()操作,定位方式能够使用html定位方式了

driver.find_element_by_css_selector(“[class=’welcomescreen-closebtn close-welcomescreen’]”).click()



可能出现的问题

可能会发现在 执行driver.switch_to.context(“WEBVIEW_com.yonyou.Uorder”) 时,会报错,此时我们应该首先排除浏览器版本对应是否正确

  • 首先打开Chrome浏览器,然后地址栏输入 chrome://inspect 回车,从图中划红线得知chrome浏览器版本为 v55,
    这里写图片描述

  • 然后我们只需要找到 webdriver 对应于 v55 的版本,并且进入Appium安装安装目录下的 Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win文件夹,并且用其覆盖此文件夹下的chromedriver.exe, 问题便可解决。







原创粉丝点击