WebdriverIO+TypeScript安卓自动化:如何调用存储的变量?
WebdriverIO + TypeScript Android自动化测试问题排查与修复
核心问题分析
- 未初始化TrainingScreen实例:测试代码中仅声明了
trainingScreen变量,但未创建实例,直接调用方法会触发Cannot read properties of undefined错误。 - 异步API未处理:WebdriverIO的
getText()、waitForDisplayed()均为异步方法,返回Promise,原代码未用async/await处理,导致获取的是Promise对象而非实际文本值。 - 未存储获取的文本:调用
getSessionNameOfTrainingCard()后未将返回值赋值给trainingSessionName,断言时变量为undefined,必然失败。 - 语法错误:断言行末尾存在多余分号。
修正后的training.ts
import BaseAppScreen from "./base-app.screen"; const SELECTORS = { Training_Card_Session_Name: `~trainingItemTitle0`, // 该元素内容动态变化 }; export default class TrainingScreen extends BaseAppScreen{ constructor() { super(); await $(SELECTORS.Training_Card_Session_Name).waitForDisplayed(); // 添加await处理异步等待 } async getSessionNameOfTrainingCard(): Promise<string> { // 改为异步方法,明确返回类型 const trainingSessionName = await $(SELECTORS.Training_Card_Session_Name).getText(); // 添加await获取文本 return trainingSessionName; } // 同步修正getSessionHeaderTitle方法(假设原方法未处理异步) async getSessionHeaderTitle(): Promise<string> { const headerSelector = `~你的会话标题选择器`; // 替换为实际元素选择器 return await $(headerSelector).getText(); } }
修正后的training.spec.ts
import TrainingScreen from '../screenobjects/training.screen'; import LoginScreen from '../screenobjects/login.screen'; // 补充导入LoginScreen describe('Training Sessions', () => { let trainingScreen: TrainingScreen; let trainingSessionName: string; beforeAll(async () => { // 改为异步函数 const loginScreen = new LoginScreen(); // 补充登录逻辑,确保导航至训练页面 await loginScreen.login('测试用户名', '测试密码'); trainingScreen = new TrainingScreen(); // 初始化TrainingScreen实例 }); it(`Select a training Card`, async () => { // 改为异步测试用例 trainingSessionName = await trainingScreen.getSessionNameOfTrainingCard(); // 将获取的文本存入变量 const headerTitle = await trainingScreen.getSessionHeaderTitle(); // 异步获取标题文本 expect(headerTitle).toEqual(trainingSessionName); // 修正多余分号 }); });
额外说明
- 所有WebdriverIO元素操作API均为异步,必须通过
async/await处理,否则无法获取实际DOM值。 - 需确保测试前完成登录并成功导航到训练页面,否则TrainingScreen构造函数中的元素等待会超时失败。
内容的提问来源于stack exchange,提问作者Harshini
相关产品推荐
相关产品推荐

