如何在 Testcafe 中只拖不放

问题描述

所以我有一个场景,当我将一个元素拖到另一个元素时,我想捕获一个弹出元素消息。

public async dragTransitiontToSegment(item: number,transitionName: string) {
    const _tailSegment = Selector('.rolling').nth(item);
    const _transitionPanel = Selector('.effects-selector.editor-panel .item-container')
    const _transitionType = _transitionPanel.withText(transitionName);
    await t.click(_transitionPanel);
    await t.dragToElement(_transitionType,_tailSegment,{speed:0.01});
}

现在我已经改变了拖动的速度,但捕获我想要的消息仍然太快,因为 dragToElement 功能会放下它。有没有办法拖住它?

解决方法

目前,TestCafe 不允许您直接拖拽而不开箱即用。您可以模拟事件序列(mousedown、mousemove 或 HTML5 拖动事件)

import { Selector,ClientFunction } from 'testcafe';
function triggerMouseEvent (selector,type,options) {
    const dispatchFunc = ClientFunction((type,options = {}) => {
        options.bubbles    = true;
        options.cancelable = true;
        options.view       = window;
        const event         = new MouseEvent(type,options);
        const targetElement = elementSelector();
        targetElement.dispatchEvent(event);
    },{ dependencies: { elementSelector: selector } });
    return dispatchFunc(type,options);
}
fixture`Fixture`
    .page`http://devexpress.github.io/testcafe/example`;
test('Test',async t => {
    await t.click('#tried-test-cafe');
    const slider = Selector('span.ui-slider-handle.ui-corner-all');
    await triggerMouseEvent(slider,'mousedown');
    await t.wait(1000);
    const offsetLeft = await Selector('.slider-value').withText('5').offsetLeft;
    await triggerMouseEvent(slider,'mousemove',{ clientX: offsetLeft });
    await t.wait(1000);
    await t
        .expect(slider.offsetLeft).gte(352)
        .expect(slider.offsetLeft).lte(353);
});

此外,TestCafe 1.15 将包含 t.dispatchEvent 方法,该方法允许您使用 TestController 触发事件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...