用户输入不同的token进行登录操作,分别有不同结果。
    image.pngimage.pngimage.png

    在测试登录业务的时候,有三种不同的结果。

    这三种结果操作步骤都一样,只是输入的数据不一致。

    当用户登录成功之后,元素种登录成功提示 获取不到
    image.png
    登录成功使用的是 Android中的一个 Toast 组件。

    1. from appium import webdriver
    2. from appium.webdriver.webdriver import WebDriver
    3. import time
    4. import pytest
    5. import os
    6. chromedriver= os.path.join(os.path.dirname(os.path.abspath(__file__)),'drivers/chromedriver.exe')
    7. @pytest.fixture(scope="session")
    8. def driver():
    9. print("在所有的测试用例执行之前创建driver")
    10. desired_caps = {
    11. 'platformName': 'Android', # 测试Android系统
    12. 'platformVersion': '7.1.2', # Android版本 可以在手机的设置中关于手机查看
    13. 'deviceName': '127.0.0.1:62001', # adb devices 命令查看 设置为自己的设备
    14. 'automationName': 'UiAutomator2', # 自动化引擎
    15. 'noReset': False, # 不要重置app的状态
    16. 'fullReset': False, # 不要清理app的缓存数据
    17. 'chromedriverExecutable': chromedriver, # chromedriver 对应的绝对路径
    18. 'appPackage': "org.cnodejs.android.md", # 应用的包名
    19. 'appActivity': ".ui.activity.MainActivity" # 应用的活动页名称
    20. }
    21. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
    22. driver.implicitly_wait(5) # 全局的隐式等待时间
    23. yield driver # 将driver 传递出来
    24. print("执行所有的用例执行之后的操作")
    25. @pytest.fixture(scope="function",autouse=True)
    26. def func_run(driver:WebDriver):
    27. yield
    28. # 用例执行完成之后清除app的数据
    29. driver.reset()
    30. # 启动app
    31. # driver.start_activity(app_package="org.cnodejs.android.md",app_activity=".ui.activity.MainActivity")
    32. test_data=[("d1563473-1f0d-4307-9774-6c2ff49c93ab",True,'登录成功'),
    33. ('d1563473-1f0d-4307-9774-6c2ff49c93a',False,'Access Token 认证失败'),
    34. ("d134567",False,"Access Token 格式错误")]
    35. @pytest.mark.parametrize("token,status,excpet_val",test_data)
    36. def test_user_login(driver:WebDriver,token,status,excpet_val):
    37. toggle_btn = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/toolbar")'
    38. '.childSelector(new UiSelector().className("android.widget.ImageButton"))')
    39. toggle_btn.click()
    40. time.sleep(1)
    41. # 点击头像
    42. avatar = driver.find_element_by_android_uiautomator('text("点击头像登录")'
    43. '.resourceId("org.cnodejs.android.md:id/tv_login_name")')
    44. avatar.click()
    45. # 输入accesstoken
    46. accesstoken = driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token')
    47. accesstoken.send_keys(token)
    48. # 点击登录按钮
    49. loginbtn = driver.find_element_by_android_uiautomator('text("登录").resourceId("org.cnodejs.android.md:id/btn_login")')
    50. loginbtn.click()
    51. if status == True:
    52. # 获取toast文本值
    53. toast = driver.find_element_by_xpath('//android.widget.Toast')
    54. print('登录信息:',toast.text)
    55. assert toast.text == excpet_val
    56. else:
    57. # TODO 编写失败的断言
    58. # 获取报错信息
    59. ele = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/edt_access_token")')
    60. print("登录结果:",ele.text)
    61. ele.screenshot('./01.png')

    图片识别api参考
    https://cloud.tencent.com/act/event/ocrdemo