Ошибка TestCafe ClientFunction TypeError, поскольку документ не определен

Я могу успешно выполнить следующий клик:

const clickMockContinueButton = ClientFunction(() => document.getElementsByName("paymentGatewayIframeReturnSubmit")[0].click())

вызывая его с помощью:

await clickMockContinueButton();

Но даже после успешного .click я получаю TypeError:

An error occurred in ClientFunction code:

TypeError: document.getElementsByName(...)[0] is undefined

Что я здесь делаю не так?

* ИЗМЕНИТЬ с временным решением *

Кажется, на моей смоделированной странице есть ошибка, когда я использую либо TC .click (Selector), либо document.getElementsByName (). Click (), поскольку действие выполняется дважды, поэтому вторая попытка щелчка вызывает ошибку, потому что кнопка больше не существует.

Поэтому я решил пойти дальше и использовать простой обходной путь:

async function handleMockContinueButton() {
    var focus = ClientFunction(() => {
        document.getElementsByName("paymentGatewayIframeReturnSubmit")[0].focus();
    });

    await focus();
    await t.pressKey("enter");
};

person Benny Meade    schedule 02.08.2019    source источник


Ответы (1)


Я не могу воспроизвести проблему "TypeError" с вашей информацией. Мой test.js:

import { Selector, ClientFunction } from 'testcafe';

fixture `My fixture`
    .page `https://google.com/`;

const clickInput = ClientFunction(() => document.getElementsByName('q')[0].click())

test('test', async t => {
    await clickInput(); 
});

Версия TestCafe: 1.3.3

Команда: testcafe chrome test.js

Результат:

Running tests in:
- Chrome 75.0.3770 / Windows 10.0.0

My fixture
√ test


1 passed (3s)

Я предлагаю вам использовать в тесте t.click( selector [, options] ).

person Vladimir A.    schedule 05.08.2019
comment
Эта проблема возникает после того, как мы представили это фиктивное исправление: github.com/DevExpress/testcafe-hammerhead / issues / 2012. Все действия щелчка по кнопке дублируются, независимо от того, использую ли я TC t.click () или document.getElementsByName (element) [0] .click (). Кнопка всегда нажимается один раз, а затем вторая попытка щелчка вызывает ошибку, потому что кнопка больше не существует, т.е. указанный селектор не соответствует ни одному элементу в дереве DOM ... с TC t.click () Я Понятия не имею, почему это происходит на нашей макетной HTML-странице или это вообще не связано с TestCafe! - person Benny Meade; 05.08.2019
comment
Думаю, пока мне нужно выяснить, как подавить ошибку в этом сценарии. - person Benny Meade; 05.08.2019
comment
catch (e) журнал ошибок: {code: 'E4', isTestCafeError: true, callsite: CallsiteRecord {filename: '/my-account-payment-cards.js', lineNum: 66, callsiteFrameIdx: 3, stackFrames: [[CallSite ], [CallSite], [CallSite], [CallSite], CallSite {}, [CallSite], [CallSite], [CallSite], [CallSite]], isV8Frames: true}, errMsg: 'TypeError: document.getElementsByName (. ..) [0] is undefined ', instantiationCallsiteName:' ClientFunction ', isRejectedDriverTask: true} - person Benny Meade; 05.08.2019
comment
Если вы попытаетесь получить элемент, который находится в <iframe>, вам нужно изменить контекст просмотра вашего теста с главного окна на это <iframe> с помощью switchToIframe Действие TestCafe. В противном случае метод getElementsByName вернет пустой NodeList. Пожалуйста, проверьте, используете ли вы правильный контекст просмотра. - person aleks-pro; 06.08.2019