appium---第二个脚本,定位页面元素
工具使用:
1、android-sdk的自带工具---uiautomator工具
2、使用find_element_by_id寻找元素位置
1 from appium import webdriver; 2 from appium import version; 3 #from selenium import webdriver; 4 import time; 5 #目前最新更新 6 7 #from appium import webDriver 8 #, 9 pack_info={ 10 'platformName':'android', 11 'deviceName':'215a343c0804', 12 'platformVersion':'7.1.2', 13 'appPackage':'包名', 14 'appActivity':'启动Activity' 15 16 } 17 18 drive=webdriver.Remote('http://127.0.0.1:4723/wd/hub',pack_info); 19 20 #drive=webdriver.Remote('http://127.0.0.1:4723/wd/hub',pack_info); 21 22 # 23 24 #休眠5s 25 time.sleep(5); 26 #点击对应的元素 27 28 drive.find_element_by_id('包名:id/iv_download_img').click()----加这一句就行 29 print('执行成功')
产生了一个问题:
①、运行后,appium可以正常运行,并开启APP,但是无法进行点击事件,事实上,并没有任何报错,纳闷中
解决方式尝试1:开发者模式中,打开允许模拟点击,完美解决
2、扩展-使用其他的定位元素的办法
①、在uiautomator中获取元素id(常用):.find_element_by_id('包名:id/iv_download_img').click()---->在uiautomator中的resource-id中直接复制即可
②、使用使用xpath获取元素:
1)如果页面中text是唯一的,那么就通过text文本获取(格式://*[@text='掃一掃',必须要有斜杠和一个※号)(很少用):find_element_by_xpath("//*[@text='掃一掃']").click();------->根据tex寻找,也是在uiautomator中的元素text中直接复制即可
2)同上,也可以用uiautomator中的content-desc文本获取,正常情况下,它的内容和text是一样的,很多时候,它是空的,用法也是和text一样find_element_by_xpath("//*[@content-desc='掃一掃']").click();
2)如果页面中class是唯一的,那么就通过class获取(格式://classname,必须要有两个斜杠)(很少用):drive.find_element_by_xpath('//android.widget.TextView').click();----->这个运行无结果,无报错,因为页面中这个class不是唯一的,所以不知道应该要取哪一个。
3)contains模糊匹配(类似模糊匹配,这个通常用于要定位一组的元素,而不是单个元素时,效率尤其突出)
4)层级定位--父定子位(很有用)
参考
https://www.cnblogs.com/syw20170419/p/8192629.html