appium Android&IOS,连接真机与模拟器,元素定位,坐标定位 adb unauthorized

本文详细介绍了如何使用Appium进行自动化测试,包括连接Android真机和模拟器,以及iOS设备。内容涵盖adb命令、元素定位、滑动操作,并提供了具体的Python代码示例,如滑动、点击和长按等触摸操作。
摘要由CSDN通过智能技术生成

持续更新,appium控制真机与模拟器自动化操作
封装公共模块、元素定位骚操作,喜欢的可以点个关注与收藏。

前夕

# adb命令
安装测试包
adb install D:\appium_app\ss.apk
屏幕截图
$ adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png  C:\Users\Shuqing\Desktop
查看链接设备
adb devices
指定连接
adb connect xxx

获取Activity
aapt dump badging D:\appium_app\ss.apk | find "launchable-activity"

aapt dump badging xxxx.apk

adb shell
dumpsys activity | grep mFocusedActivity

desired_caps['appPackage'] = 'com.tal.kaoyan' 
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
第一种、常规做法		**adb unauthorized**

1.1 杀掉adb服务 :adb kill-server

1.2 到开发者设置中,撤销usb调试权限。

1.3 关闭usb调试开关,拔掉数据线。

1.4 打开usb调试权限,插入数据线。

1.5 重启adb服务:adb start-server,或者adb devices ,注意:手机上的授予权限弹窗,授予权限后,重新执行adb devices。

若第一种方式按照步骤执行完成后,还是无法授予权限,显示unauthorized。可以尝试第二种方式。
第二种:

查看Android设备的vid和pid方式

adb shell

查看VID:(oppo1:22d9)

cat /sys/class/android_usb/android0/idVendor

查看PID:(oppo2:276c)

cat  /sys/class/android_usb/android0/idProduct

在PC端~/.android/目录下新建adb_usb.ini文件,有则不用新建。

打开输入VID
参考:https://blog.csdn.net/WOAIWOJIAWEIHAO150/article/details/117222072?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166304660716782395395610%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166304660716782395395610&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-117222072-null-null.142^v47^pc_rank_34_2,201^v3^control_1&utm_term=adb%20unauthorized&spm=1018.2226.3001.4187

1.连接Android真机

def appium_desired():
    desired_caps={}
    desired_caps['platformName'] = 'Android'
	desired_caps['deviceName'] = '手机型号'
	desired_caps['platformVersion'] = '7.1.1'  # Android版本
	desired_caps['appPackage'] = 'com.tal.kaoyan' 
	desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
	# 输入中文配置
	desired_caps['unicodeKeyboard'] = True
	desired_caps['resetKeyboard'] = True
	desired_caps['noReset']=True	# 每次打开纯机版app

    driver=webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps)
    driver.implicitly_wait(8)
    return driver

2.连接模拟器

desired_caps={}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['platformVersion'] = '7.1.2'
desired_caps['app'] = r'D:\appium_app\kaoyan3.1.0.apk'
desired_caps['appPackage'] = 'com.tal.kaoyan'
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset']='True'

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(5)

3.连接IOS真机

在这里插入代码片

4.连接IOS真机

在这里插入代码片

5.元素定位

ID、Class、Name,基础的都会操作,css与xpath定位不容易定位的坐标
参考

from appium import webdriver
from selenium.webdriver.common.by import By

driver.find_element_by_accessibility_id()

driver.find_element(By.XPATH, '//*[@class="android.widget.EditText" and @index="3"]').send_keys('zxw123456')
driver.find_element(By.XPATH, "//*[@text='']")
driver.find_element(By.XPATH, "//*[@resource-id='']")
driver.find_element(By.XPATH, "//*[@class='']")
driver.find_element(By.XPATH, "//*[contains(@text='取消')]")
driver.find_element(By.XPATH, "//*[@text='搜索' and @resource-id='search']")
driver.find_element(By.XPATH, "//*[@text='搜索'/..]")

6.获取元素属性

driver.find_element(MobileBy.XPATH, "//*[@resource-id='']").click()
driver.find_element(MobileBy.XPATH, "//*[@='']").send_keys('')
# 获取 text属性
driver.find_element(MobileBy.XPATH, "//*[@='']").get_attribute('text')
# 获取其他属性 如:class、resource-id、content-desc
driver.find_element(MobileBy.XPATH, "//*[@='']").get_attribute('class')
...
# 获取源码
driver.page_sourc

7.滑动

def get_size():
    x=driver.get_window_size()['width']
    y=driver.get_window_size()['height']
    return x,y

def swipeLeft():
    l=get_size()
    x1=int(l[0]*0.9)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.1)
    driver.swipe(x1,y1,x2,y1,1000)
    
def swipeUp():
    l = get_size()
    x1 = int(l[0] * 0.5)
    y1 = int(l[1] * 0.95)
    y2 = int(l[1] * 0.35)
    driver.swipe(x1, y1, x1, y2, 1000)

def swipeDown():
    l=get_size()
    x1 = int(l[0] * 0.5)
    y1 = int(l[1] * 0.35)
    y2 = int(l[1] * 0.85)
    driver.swipe(x1, y1, x1, y2, 1000)

def swipeRight():
    l=get_size()
    y1 = int(l[1] * 0.5)
    x1 = int(l[0] * 0.25)
    x2 = int(l[0] * 0.95)
    driver.swipe(x1, y1, x2, y1, 1000)

8.python

方法:press() 开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置。 press也可以接收屏幕的坐标(x,y)。
press(self, el=None, x=None, y=None)
TouchAction(driver).press(x=0,y=308)

长按
方法:longPress() 开始按压一个元素或坐标点(x,y)。 相比press()方法,longPress()多了一个入参,既然长按,得有按的时间吧。duration以毫秒为单位。1000表示按一秒钟。其用法与press()方法相同。
long_press(self, el=None, x=None, y=None, duration=1000)

点击
方法:tap() 对一个元素或控件执行点击操作。用法参考press()。
tap(self, element=None, x=None, y=None, count=1)

移动
方法:move_to() 将指针从上一个点移动到指定的元素或点。
move_to(self, el=None, x=None, y=None)
注意:
移动到目位置有时是算绝对坐标点,有时是基于前面一个坐标点的偏移量,这个要结合具体App来实践。

暂停
方法:Wait()
wait(self, ms=0)
暂停脚本的执行,单位为毫秒。

释放
方法release() 结束的行动取消屏幕上的指针。
release(self)
执行
perform() 执行的操作发送到服务器的命令操作。
perform(self)

#连续滑动两次设置图案密码
for i in range(2):
    TouchAction(driver).press(x=243,y=381).wait(2000)\
        .move_to(x=455,y=390).wait(1000)\
        .move_to(x=643,y=584).wait(1000)\
        .move_to(x=647,y=784).wait(1000)\
        .release().perform()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuno Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值