Перетаскивание с помощью Electron/Webdriver

#javascript #reactjs #selenium #selenium-webdriver #electron

Вопрос:

Я пытаюсь написать тест для электронного приложения, которое проверяет функцию перетаскивания. Я пробовал два разных метода. Собственный метод перетаскивания Webdriver, а также с помощью перформакций. Однако в обоих случаях, похоже, ничего не происходит. Элемент, похоже, не перемещается, хотя он будет работать нормально, если я перетащу его вручную при использовании приложения. В настоящее время я использую:

«react-beautiful-dnd»: «^13.1.0», «electron»: «^9.4.3», «electron-chromedriver»: «^11.0.0», «мокко»: «^8.2.1», «react»: «^16.4.0», «selenium-webdriver»: «^4.0.0-бета.1», «spectron»: «^11.0.0», «spectron-ключи»: «0.0.1»,

Вот как выглядит тест, когда я использую выполнение действий:

 it('should display the correct string when the rows are dragged and dropped in a different order', async () => {
        const correctString = '"Field3": Value3^4 amp; "Field1": Value1^2 amp; "Field2": Value2^3'
        const target = await app.client.$('[id="search_input"]');
        const sourceElement = await app.client.$('[id="row_1"]');

        //function to get coordinates of the source element and the target.
        const getCoordsForElement = async (elementId) => {
            const rect = await app.client.getElementRect(elementId);
            const X = parseInt(rect.x   (rect.width / 2), 10);
            const Y = parseInt(rect.y   (rect.height / 2), 10);
            return [X, Y];
            };

        const [sourceX, sourceY] = await getCoordsForElement(sourceElement.elementId)
        const [targetX, targetY] = await getCoordsForElement(target.elementId)
        const [diffX, diffY] = [targetX - sourceX, targetY - sourceY]

        await app.client.performActions([{
            type: 'pointer',
            id: 'finger1',
            parameters: { pointerType: 'mouse' },
            actions: [
                { type: 'pointerMove', duration: 0, x:sourceX , y:sourceY },
                { type: 'pointerDown', button: 1 },
                { type: 'pause', duration: 500 },
                { type: 'pointerMove', duration: 1000, origin: "pointer", x: diffX, y: diffY },
                { type: 'pointerUp', button: 1 }
            ]
        }]);

        await app.client.pause(1000)
        const text = await searchInput.getValue()
        console.log("TEXT: ", text)
        assert.strictEqual(text, correctString, `Expected the correct string to be "${correctString}".  Instead it was "${text}".`)
    })
 

И вот как выглядит тест, когда я пытаюсь использовать метод drapAndDrop:

 it('should display the correct string when the rows are dragged and dropped in a different order', async () => {
        const correctString = '"Field3": Value3^4 amp; "Field1": Value1^2 amp; "Field2": Value2^3'
        const target = await app.client.$('[id="search_input"]');
        const sourceElement= await app.client.$('[id="row_1"]');

        await sourceElement.dragAndDrop({x: -247, y: -210})

        await app.client.pause(1000)
        const text = await searchInput.getValue()
        console.log("TEXT: ", text)
        assert.strictEqual(text, correctString, `Expected the correct string to be "${correctString}".  Instead it was "${text}".`)
})