• 好的,学到了。目前我还没接触到。先把前边的路走好了,后边把这个列到计划里。全链路自动化听起来很高级的样子😀

  • 源码可以分享吗?

  • 好的,感谢大佬

  • 受教了,感谢大佬

  • 好多 jd,标明了 jmeter

  • 这个单个的已经好了的

  • 好完整的一套流程。准备实行起来

  • 已部署。接口这块没了解,之前一直在看功能。但是没采购

  • sql 语法是会进行数据库操作吗?接口相关的不大多都是请求格式,请求头啥的。还会涉及到 sql?

  • 已下载,正在研究中

  • 超完整,不愧是大佬中的大佬!

  • stagehand 有体验过的吗 at 2025年08月19日

    好的。我发现这个的相关资料也挺少的。我在 github 上问问题。也一直没见到有人回复。搜索到的资料都是说这个多厉害。但是具体的落地实现细节都没看到写的

  • 测试用例 at 2025年08月18日

    关于这些,有系统的操作做步骤吗?想了解一下规范流程

  • stagehand 有体验过的吗 at 2025年08月18日

    请问大佬是直接用了一个 python 项目。然后去安装 stagehand 去进行验证使用的吗?

  • stagehand 有体验过的吗 at 2025年08月18日

    👍

  • stagehand 有体验过的吗 at 2025年08月18日

    我有自己部署 qwen 的

  • stagehand 有体验过的吗 at 2025年08月18日

    playwright 用起来咋样。比 selenium

  • stagehand 有体验过的吗 at 2025年08月18日

    process.env.PYTHONIOENCODING = "utf-8";
    import { Stagehand } from "@browserbasehq/stagehand";
    import StagehandConfig from "./stagehand.config.js";
    import { CustomOpenAIClient } from "./llm_clients/customOpenAI_client.js";
    import OpenAI from "openai";
    import dotenv from "dotenv";
    import assert from "assert";

    // 加载环境变量
    dotenv.config();
    assert(process.env.DASHSCOPE_API_KEY, "DASHSCOPE_API_KEY must be set in environment variables"); // [1]

    async function performSearch(stagehand: Stagehand) {
    const page = stagehand.page;

    // 断言页面导航成功
    const response = await page.goto("https://www.baidu.com");
    assert(response?.ok(), Failed to load Baidu homepage. Status: ${response?.status()}); // [2]

    // 断言搜索框存在并可输入
    const typeResult = await page.act('type "Stagehand" into the search box');
    assert(typeResult.success, Failed to type into search box: ${typeResult.message}); // [3]

    // 断言搜索按钮点击成功
    const clickResult = await page.act("click the search button");
    assert(clickResult.success, Failed to click search button: ${clickResult.message}); // [4]

    // 可选:断言搜索结果页面包含预期内容
    await page.waitForSelector("#content_left", { timeout: 5000 });
    const searchResults = await page.$eval("#content_left", el => el.textContent);
    assert(searchResults?.includes("Stagehand"), "Search results did not contain expected term"); // [5]
    }

    (async () => {
    let stagehand: Stagehand | null = null; // 显式声明类型并初始化为 null
    try {
    stagehand = new Stagehand({
    ...StagehandConfig,
    llmClient: new CustomOpenAIClient({
    modelName: "Qwen3-14B",
    client: new OpenAI({
    apiKey:"xxxxxxxxxxxxxxxxxxxxx",
    baseURL: "http://xx.xx.x.xx:xx/v1/chat/completions",

    }),
    }),
    });

    await stagehand.init();
    await performSearch(stagehand);
    } catch (error) {
    console.error("Test failed:", error);
    process.exit(1);
    } finally {
    // 安全清理资源
    try {
    if (stagehand) await stagehand.close();
    } catch (closeError) {
    console.error("Failed to close Stagehand:", closeError);
    }
    }
    })();

    我这个控制台目前一直提示这样
    ERROR: API key for openai not found in environment variable OPENAI_API_KEY
    category: "init"
    [2025-08-18 15:06:17.878 +0800] INFO: Custom LLM clients are currently not supported in API mode
    category: "init"
    我看和模型对话了。但是就执行了打开页面操作。那个 goto 又是 playwright 的。那个 act 也没执行

  • 关于 UI 自动化方案 at 2025年08月15日

    什么录制工具呢?大佬分享一下

  • 测试用例 at 2025年08月15日

    那什么才叫好的用例呢

  • stagehand 有体验过的吗 at 2025年08月15日

    要调研使用的。这个的话。自己本地化部署模型应该就能解决你说的那个敏感信息问题吧

  • stagehand 有体验过的吗 at 2025年08月15日

    我没配置 deepseek.我以为你的意思是直接不能配置呢.我用的是 qwen3-14b。你可以先通过 curl 命令获取 deepseek 模型返回的数据结构。然后再一步步调整成 stagehand 适配的结构。最后应该就正常了。我之前是这样的。但是我发现我把模型直接写道那个用例.ts。没配置那些什么 strem,enale_thinking 这些参数就能正常使用

  • stagehand 有体验过的吗 at 2025年08月15日

    为啥这样说?

  • stagehand 有体验过的吗 at 2025年08月14日

    Nice! 我找到配置自定义大模型的方式了。在官方文档上边https://docs.stagehand.dev/examples/custom_llms
    之前白走了好多弯路》谢谢大佬的灵感提供!!

  • stagehand 有体验过的吗 at 2025年08月14日


    我看官方文档上是支持 deepseek 的