You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:20:25