用户输入不同的token进行登录操作,分别有不同结果。
在测试登录业务的时候,有三种不同的结果。
这三种结果操作步骤都一样,只是输入的数据不一致。
当用户登录成功之后,元素种登录成功提示 获取不到
登录成功使用的是 Android中的一个 Toast 组件。
from appium import webdriver
from appium.webdriver.webdriver import WebDriver
import time
import pytest
import os
chromedriver= 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()
# 输入accesstoken
accesstoken = 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_val
else:
# TODO 编写失败的断言
# 获取报错信息
ele = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/edt_access_token")')
print("登录结果:",ele.text)
ele.screenshot('./01.png')