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

使用Jest运行Selenium测试用例失败的问题求助

修复Selenium + Jest测试用例未执行及Promise处理问题

你的核心问题是没正确处理Selenium的异步Promise,加上Jest默认不会等待.then链式调用完成就会结束测试,导致内部代码没执行或expect不生效。另外还有元素定位时机和XPath语法的问题,以下是具体修正方案:

关键问题分析

  1. Selenium的driver.get()、findElement()、getText()全都是异步方法,返回Promise,你用.then嵌套但没把Promise返回给Jest,Jest会认为测试已完成,跳过后续异步代码。
  2. 直接调用findElement()可能在元素还没渲染完成时执行,导致“元素未找到”错误,即使浏览器里能看到元素。
  3. 你的XPath语法有误:li[@id='__tile11']是相对路径,应该用绝对路径//li[@id='__tile11']才能全局定位元素。

修正后的代码

const { By, until } = require('selenium-webdriver');

describe('When a user Opens Launchpad', () => {
  test('It should be able to Navigate to Tasks Application without errors', async () => {
    // 等待页面加载完成
    await driver.get('http://localhost:4004/fiori.html');
    
    // 显式等待元素出现并可交互,最长等待10秒
    const tileElement = await driver.wait(until.elementLocated(By.xpath("//li[@id='__tile11']")), 10000);
    
    // 等待元素文本加载完成
    const tileText = await tileElement.getText();
    
    // 执行断言
    expect(tileText).toBe("VT Dashboard");
  }, 200000);
});

改动说明

  • 用async/await替代.then链式调用:让代码更易读,同时确保Jest等待所有异步操作完成后再结束测试。
  • 添加driver.wait()显式等待:通过until.elementLocated等待元素被DOM定位到,避免因页面渲染延迟导致的元素未找到错误。
  • 修正XPath路径:使用//li全局定位id为__tile11的li元素。
  • 等待getText()的Promise结果:getText()返回Promise,必须用await获取实际文本后再断言。

额外注意事项

  • 确保你的Selenium WebDriver版本和Jest版本兼容,避免异步处理的兼容性问题。
  • 如果元素需要滚动到可视区域才能交互,可以在获取元素后添加await driver.executeScript("arguments[0].scrollIntoView();", tileElement);。

内容的提问来源于stack exchange,提问作者Mellacheruvu Janakirama Sarma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:55:20