我正在try 用puppeteer以编程方式更改垫子滑块值,但我无法使其工作.

这就是我try 过的:

async function changeSliderValue(page:Page){
    try {
        const thumb = await page.$('.mat-slider-thumb'); 
        const position = await thumb.boundingBox();
        await page.mouse.move(position.x, position.y);
        await page.mouse.down();
        await page.mouse.move(position.x + 100, position.y);
        await page.mouse.up();
    } catch (error) {
        console.log(error);
    }
}

但是拇指位置/滑块的值不会改变.

你能建议一个更好的方法吗?

这是滑块:

<mat-slider _ngcontent-c28="" class="scale-slider mat-slider mat-accent mat-slider-horizontal" max="100" min="1"
    name="scale" role="slider" step="1" tabindex="0" aria-disabled="false" aria-valuemax="100" aria-valuemin="1"
    aria-valuenow="28.000000000000004" aria-orientation="horizontal"
    style="touch-action: none; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
    <div class="mat-slider-wrapper">
        <div class="mat-slider-track-wrapper">
            <div class="mat-slider-track-background" style="transform: translateX(0px) scaleX(0.727273);"></div>
            <div class="mat-slider-track-fill" style="transform: translateX(0px) scaleX(0.272727);"></div>
        </div>
        <div class="mat-slider-ticks-container" style="transform: translateX(0%);">
            <div class="mat-slider-ticks" style="background-size: 0% 2px; transform: translateZ(0px) translateX(0%);">
            </div>
        </div>
        <div class="mat-slider-thumb-container" style="transform: translateX(-72.7273%);">
            <div class="mat-slider-focus-ring"></div>
            <div class="mat-slider-thumb"></div>
            <div class="mat-slider-thumb-label"><span class="mat-slider-thumb-label-text">28.000000000000004</span>
            </div>
        </div>
    </div>
</mat-slider>

推荐答案

这是我在Angular Material Slider上的演示

const puppeteer = require("puppeteer");

(async function main() {
  try {
    console.log("launching");
    const browser = await puppeteer.launch({
      headless: false
    });
    const page = await browser.newPage();
    await page.goto(
      "https://material.angular.io/components/slider/overview",
      {
        waitUntil: "networkidle2"
      }
    );

    const cookieBtnSelector =
      "body > material-docs-app > app-cookie-popup > div > div > button";

    await page.click(cookieBtnSelector);

    const sliderSelector =
      "#slider-overview > div > div.docs-example-viewer-body.ng-star-inserted > slider-overview-example > mat-slider > div";
    await page.waitForSelector(sliderSelector);

    const sliderElement = await page.$(sliderSelector);
    const pos = await sliderElement.asElement().boundingBox();

    const percentage = 90; // adjust slider percentage;

    await page.mouse.click(
      pos.x + percentage * (pos.width / 100),
      pos.y
    );
  } catch (e) {
    console.log("our error", e);
  }
})();

Typescript相关问答推荐

Angular 过滤器形式基于某些条件的数组控制

如何根据模板类型实现不同的模板函数行为?

返回同时具有固定键和变量键的对象的函数的返回类型

APIslice-CreateAPI的RTK打字错误

如何判断对象是否有重叠的叶子并产生有用的错误消息

如何调整对象 struct 复杂的脚本函数的泛型类型?

Fp-ts使用任务的最佳方法包装选项

FatalError:Error TS6046:';--模块分辨率';选项的参数必须是:'; node ';,'; node 16';,'; node

TypeScrip:强制使用动态密钥

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

判断映射类型内的键值的条件类型

TYPE FOR ARRAY,其中每个泛型元素是单独的键类型对,然后在该数组上循环

如何避免从引用<;字符串&>到引用<;字符串|未定义&>;的不安全赋值?

使用Cypress测试从Reaction受控列表中删除项目

使用&reaction测试库&如何使用提供程序包装我的所有测试组件

如何使用angular15取消选中位于其他组件中的复选框

映射类型不是数组类型

Typescript泛型验证指定了keyof的所有键

如何将 MUI 主题对象的自定义属性与情感样式组件中的自定义props 一起使用?

在 next.js 13.4 中为react-email-editor使用forwardRef和next/dynamic的正确方法