【问题标题】:Problems when using Chosen Selectors in external helper functions在外部辅助函数中使用选择的选择器时的问题
【发布时间】:2019-05-08 13:25:44
【问题描述】:

我使用 Testcafe 来测试一个使用 jquery 插件 Chosen 和 我想根据外部辅助函数 (getSelectedOption) 返回的值在我的测试代码中进行断言。

这个函数获取一个选择的选择器作为参数并且应该将选择的值返回给断言,但是这个函数总是返回列表的第一个元素而不是选择的那个。

当我在测试中使用函数代码时,一切正常。 该函数似乎没有关于 HTML 数据的实际状态,并且看不到某个元素已被选中。

这是一个来自测试代码的sn-p:

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

这是一个来自外部函数的sn-p:

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')

【问题讨论】:

    标签: javascript automated-tests e2e-testing web-testing testcafe


    【解决方案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...');
    }); 
    

    【讨论】:

    • 非常感谢您的回复,它可以工作:) 但是不能在 ClientFunction 中调用另一个函数吗?我仍然想使用我的“getChosenSelectorFromName”函数,但我得到一个 ReferenceError“getChosenSelectorFromName 未定义”。
    • 可以调用getChosedSelectorFromName函数。您需要将此函数作为 ClientFunction 的依赖项传递。请看下面的例子:devexpress.github.io/testcafe/documentation/test-api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多