Nano Hash - криптовалюты, майнинг, программирование

Проблемы при использовании выбранных селекторов во внешних вспомогательных функциях

Я использую Testcafe для тестирования веб-сайта, который использует плагин jquery Chosen, и я хочу сделать утверждение в моем тестовом коде в зависимости от значения, возвращаемого внешней вспомогательной функцией (getSelectedOption).

Эта функция получает выбранный селектор в качестве параметра и должна возвращать выбранное значение в утверждение, но функция всегда возвращает первый элемент списка вместо выбранного.

Когда я использую код функции в своем тесте, все работает нормально. Кажется, что функция не имеет фактического состояния данных HTML и не видит, что элемент уже выбран.

Это фрагмент тестового кода:

await t
 .click(await getOptionByText('salutation', 'Frau'))
 .expect(await getSelectedOption('gender')).eql('weiblich')

Это фрагмент из внешних функций:

export const getChosenSelectorFromName = selectName => `#${selectName}_chosen`;

        export const getSelectedOption = async selectName => {
          const selectedOptionText = await 
     Selector(getChosenSelectorFromName(selectName))
            .find('.chosen-single')
            .innerText;
          return selectedOptionText.toLowerCase().trim()
        };

        export const getOptionByText = async (selectName, optionText) => {
          const chosenSelectorString = getChosenSelectorFromName(selectName);
          await t.click(Selector(chosenSelectorString));
          return await Selector(chosenSelectorString)
            .find('.chosen-drop')
            .find('li')
            .withText(optionText);
        };

Когда я использую в своем тесте аналогичный код, например функцию getSelectedOption, все работает нормально:

const genderSelect = Selector('#gender_chosen);

.click(await getOptionByText('salutation', 'Frau'))
       .expect(genderSelect.innerText).eql('WEIBLICH')

Ответы:


1

Если вы вызовете await Selector(<some value>), TestCafe немедленно попытается получить данные с веб-страницы в текущий момент. Вы можете указать TestCafe повторить попытку данных с веб-страницы, пока они не станут равными ожидаемому значению. Для этого вам нужно переместить функцию манипулирования DOM в ClientFunction:

import { Selector, ClientFunction } from "testcafe";

fixture `Fixture`
        .page('https://harvesthq.github.io/chosen/');

const getChosenSelectorFromName = selectName => `#${selectName}_chosen`;

const getSelectedOption = ClientFunction(selector => {
    var choosenDiv    = document.querySelector(selector);
    var singleValueEl = choosenDiv.querySelector('.chosen-single');

    return singleValueEl.innerText;
});


test('test', async t => {
    await t.expect(getSelectedOption('.chosen-container')).eql('Choose a Country...');
}); 
08.05.2019
  • Большое спасибо за ответ, работает :) Но нельзя ли вызвать другую функцию внутри ClientFunction? Я все еще хочу использовать функцию getChosenSelectorFromName, но получаю ReferenceError, getChosenSelectorFromName не определен. 09.05.2019
  • Вы можете вызвать функцию getChosedSelectorFromName. Вам необходимо передать эту функцию как зависимость от вашей ClientFunction. Взгляните на следующий пример: devexpress.github.io/testcafe/documentation/test-api/ 13.05.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..