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


在测试登录业务的时候,有三种不同的结果。
这三种结果操作步骤都一样,只是输入的数据不一致。
当用户登录成功之后,元素种登录成功提示 获取不到
登录成功使用的是 Android中的一个 Toast 组件。
from appium import webdriverfrom appium.webdriver.webdriver import WebDriverimport timeimport pytestimport oschromedriver= os.path.join(os.path.dirname(os.path.abspath(__file__)),'drivers/chromedriver.exe')@pytest.fixture(scope="session")def driver():print("在所有的测试用例执行之前创建driver")desired_caps = {'platformName': 'Android', # 测试Android系统'platformVersion': '7.1.2', # Android版本 可以在手机的设置中关于手机查看'deviceName': '127.0.0.1:62001', # adb devices 命令查看 设置为自己的设备'automationName': 'UiAutomator2', # 自动化引擎'noReset': False, # 不要重置app的状态'fullReset': False, # 不要清理app的缓存数据'chromedriverExecutable': chromedriver, # chromedriver 对应的绝对路径'appPackage': "org.cnodejs.android.md", # 应用的包名'appActivity': ".ui.activity.MainActivity" # 应用的活动页名称}driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)driver.implicitly_wait(5) # 全局的隐式等待时间yield driver # 将driver 传递出来print("执行所有的用例执行之后的操作")@pytest.fixture(scope="function",autouse=True)def func_run(driver:WebDriver):yield# 用例执行完成之后清除app的数据driver.reset()# 启动app# driver.start_activity(app_package="org.cnodejs.android.md",app_activity=".ui.activity.MainActivity")test_data=[("d1563473-1f0d-4307-9774-6c2ff49c93ab",True,'登录成功'),('d1563473-1f0d-4307-9774-6c2ff49c93a',False,'Access Token 认证失败'),("d134567",False,"Access Token 格式错误")]@pytest.mark.parametrize("token,status,excpet_val",test_data)def test_user_login(driver:WebDriver,token,status,excpet_val):toggle_btn = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/toolbar")''.childSelector(new UiSelector().className("android.widget.ImageButton"))')toggle_btn.click()time.sleep(1)# 点击头像avatar = driver.find_element_by_android_uiautomator('text("点击头像登录")''.resourceId("org.cnodejs.android.md:id/tv_login_name")')avatar.click()# 输入accesstokenaccesstoken = driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token')accesstoken.send_keys(token)# 点击登录按钮loginbtn = driver.find_element_by_android_uiautomator('text("登录").resourceId("org.cnodejs.android.md:id/btn_login")')loginbtn.click()if status == True:# 获取toast文本值toast = driver.find_element_by_xpath('//android.widget.Toast')print('登录信息:',toast.text)assert toast.text == excpet_valelse:# TODO 编写失败的断言# 获取报错信息ele = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/edt_access_token")')print("登录结果:",ele.text)ele.screenshot('./01.png')
