Appium 通过监控日志完成Andriod手机验证码登录

脚本思路:在页面点击【获取验证码】按钮后,监控日志,通过日志拿到验证码,从而完成登录


PS:手机为oppo r11

#coding=utf-8
'''
Created on 2018年5月16日

@author: Administrator
'''
from appium import webdriver
import os,time

def strat():
    desired_caps = {}
    desired_caps['platformName'] = 'Android'    
    desired_caps['deviceName'] = 'HMKNW17727005211'   
    desired_caps['unicodeKeyboard'] = True      
    desired_caps["resetKeyboard"] = True       
    desired_caps['appPackage'] = 'XXXXXX'
    desired_caps['appActivity'] = 'XXXXXX'        
    driver = webdriver.Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = desired_caps)  
    time.sleep(2)
    return driver     
    


def logcat():   #获取日志函数
    cmd_c = 'adb logcat -c'
    os.popen(cmd_c)         #清除以前的日志
    for i in range(30):                 #30秒没有短信日志抛ValueError
        try:
            cmd_d = 'adb logcat -d | findstr codeString'  
            value = os.popen(cmd_d).read()              #获取刚刚的短信验证码哪一行日志信息
            code = value.split('验证码:')[1].split(',')[0]
            break
        except:
            pass
        time.sleep(1)
    else:
        raise ValueError
    return code 




def login(driver,phone = u'18888888888'):  
    driver.implicitly_wait(20)
    driver.find_element_by_id('com.tanbeixiong.tbx_android:id/iv_login_phone').click()
    driver.find_element_by_id('com.tanbeixiong.tbx_android:id/et_login_phone_number').send_keys(phone)
    driver.find_element_by_name('获取验证码').click()
    try:
        code = logcat()
        print code
    except ValueError:
        return False
    driver.find_element_by_id('com.tanbeixiong.tbx_android:id/et_login_input_verify_code').send_keys(code)
    driver.find_element_by_name('登录').click()
    try:
        driver.implicitly_wait(10)
        driver.find_element_by_name('昵称')
        return True
    except:
        return False
    
    
if __name__ == '__main__':
    driver = strat()
    Boole = login(driver)
    print Boole
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页