python+appium app真机测试(一)

因为adb点击会有延迟,并且不同分辨率还需重新设置,故利用appium查看id进行定位点击。

一开始连接不上appium是因为appium版本太低,1.14的不能连接上安卓7.0以上的手机。

python 3.6
appium 1.17.1
进入appium
python+appium app真机测试(一)_第1张图片
红框里的网址端口要记住,后面连接手机会用到
python+appium app真机测试(一)_第2张图片
录入手机信息
python+appium app真机测试(一)_第3张图片
→start session
python+appium app真机测试(一)_第4张图片
这样就可以查到我们需要点击的控件 id

开始些python代码:

from appium import webdriver
import  time

#初始化信息
desired_caps={}
desired_caps["platformName"]="Android"
id=input("请输入手机编号:")
#这里我主要使用了两部手机,懒得每次都去改序列号和安卓版本号,所以用了一个判断,如果手机类型增多则可以改用字典进行对应
if id=="0770":
    desired_caps["deviceName"]="bfbcf0e90104"
    desired_caps["platformVersion"]="6.0.1"
elif id=="0804":
    desired_caps["deviceName"] = "D1CGAP8721800579"
    desired_caps["platformVersion"] = "7.0.0"

desired_caps["appPackage"]="audiorec.android"
desired_caps["appActivity"]="audiorec.android.MainActivity"

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

print("连接完成!")
##判断元素是否存在方法
def is_element_exist(element):
    source = driver.page_source
    print(source)
    if element in source:
        return True
    else:
        return False
##

# 授予权限
print("需要权限授予")
driver.find_element_by_id("audiorec.android:id/goto_settings").click()# ... ..click()表示点击
time.sleep(1)
driver.find_element_by_id("android:id/button1").click()
time.sleep(0.5)
driver.find_element_by_id("android:id/button1").click()
time.sleep(0.5)
driver.find_element_by_id("android:id/button1").click()
time.sleep(0.5)
driver.find_element_by_id("android:id/button1").click()
print("权限授予完成!")

#登录
print("准备登录!")
time.sleep(1)#等待时间很重要,如果太快,页面会识别不到该元素的存在,会报错
driver.find_element_by_id("audiorec.android:id/username").send_keys("15530350778") #.send_keys("")输入
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/passward").send_keys("lrs123456")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/login").click()
print("成功登录!")

#jin'ru
print("准备进入项目!")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/projectid").send_keys("LS1027714820964")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/getprobtn").click()
time.sleep(1)

if is_element_exist("跳过"):
    print("存在帮助文档,需要跳过") 
    driver.find_element_by_id("audiorec.android:id/endteachbtn").click()
else:
    print("没有帮助文档可跳过,直接继续")
    driver.find_element_by_id("audiorec.android:id/goon_page").click()
    time.sleep(2)
    driver.find_element_by_id("audiorec.android:id/goonbtn").click()

time.sleep(2)
driver.find_element_by_id("audiorec.android:id/knowBtn").click()
print("成功进入项目")

print("录音开始")
time.sleep(5)
#设置句子数
m=int(input("请输入当前项目句子数:"))
for n in range(0,m):
    time.sleep(3)
    driver.find_element_by_id("audiorec.android:id/btnRecord").click()
    time.sleep(5) #中间间隔时间
    driver.find_element_by_id("audiorec.android:id/btnStop").click()
    n=n+1
    print("第%d句话,录音完成!"%(n))
print("录音完成!")
time.sleep(2)
driver.find_element_by_id("audiorec.android:id/btnComplete").click()
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/nextrecordbtn").click()

print("准备上传")
driver.find_element_by_id("audiorec.android:id/updata_page").click()
time.sleep(2)
driver.find_element_by_id("audiorec.android:id/uploading").click()
time.sleep(5)
print("上传完成!")

权限授予问题

每次运行程序都需要重新授予权限,不同手机允许权限授予的id不同,所以利用appium中xpath定位来进行点击。

#不同手机权限授予id不同
if is_element_exist("允许"):
    for l in range(0,4):
        driver.find_element_by_xpath("//*[@text='允许']").click()
        l=l+1
elif is_element_exist("始终允许"):
    for l in range(0, 4):
        driver.find_element_by_xpath("//*[@text='始终允许']").click()
        l = l + 1

到这里,于是可以想到把前面能够用xpath替换的地方,替换一下。

from appium import webdriver
import  time

#初始化信息
desired_caps={}
desired_caps["platformName"]="Android"
id=input("请输入手机编号:")
if id=="0770":
    desired_caps["deviceName"]="bfbcf0e90104"
    desired_caps["platformVersion"]="6.0.1"
elif id=="0804":
    desired_caps["deviceName"] = "D1CGAP8721800579"
    desired_caps["platformVersion"] = "7.0.0"

desired_caps["appPackage"]="audiorec.android"
desired_caps["appActivity"]="audiorec.android.MainActivity"

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

print("连接完成!")
##判断元素是否存在方法
def is_element_exist(element):
    source = driver.page_source
    print(source)
    if element in source:
        return True
    else:
        return False
##

# 授予权限
print("需要权限授予")
driver.find_element_by_id("audiorec.android:id/goto_settings").click()
time.sleep(1)
#不同手机权限授予id不同
if is_element_exist("允许"):
    for l in range(0,4):
        driver.find_element_by_xpath("//*[@text='允许']").click()
        l=l+1
elif is_element_exist("始终允许"):
    for l in range(0, 4):
        driver.find_element_by_xpath("//*[@text='始终允许']").click()
        l = l + 1
print("权限授予完成!")

#登录
print("准备登录!")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/username").send_keys("15530350778")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/passward").send_keys("lrs123456")
time.sleep(1)
driver.find_element_by_xpath("//*[@text='登录']").click()
print("成功登录!")

#jin'ru
print("准备进入项目!")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/projectid").send_keys("LS1027714820964")
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/getprobtn").click()
time.sleep(1)

if is_element_exist("跳过"):
    print("存在帮助文档,需要跳过")
    driver.find_element_by_xpath("//*[@text='跳过']").click()
else:
    print("没有帮助文档可跳过,直接继续")
    driver.find_element_by_xpath("//*[@text='进行中']").click()
    time.sleep(2)
    driver.find_element_by_xpath("//*[@text='继续']").click()

time.sleep(2)
driver.find_element_by_xpath("//*[@text='好的']").click()
print("成功进入项目")

print("录音开始")
time.sleep(5)
#设置句子数
m=int(input("请输入当前项目句子数:"))
for n in range(0,m):
    time.sleep(3)
    driver.find_element_by_id("audiorec.android:id/btnRecord").click()
    time.sleep(5) #中间间隔时间
    driver.find_element_by_id("audiorec.android:id/btnStop").click()
    n=n+1
    print("第%d句话,录音完成!"%(n))
print("录音完成!")
time.sleep(2)
driver.find_element_by_id("audiorec.android:id/btnComplete").click()
time.sleep(1)
driver.find_element_by_id("audiorec.android:id/nextrecordbtn").click()

print("准备上传")
driver.find_element_by_xpath("//*[@text='上传']").click()
time.sleep(2)
driver.find_element_by_id("audiorec.android:id/uploading").click()
time.sleep(5)
print("上传完成!")

你可能感兴趣的:(测试学习)