如何在Senchat Test

时间:2017-06-26 21:41:25

标签: extjs sencha-test sencha-test-2.1

有没有办法从组合框中选择项目而没有项目的实际价值?

让我们说我们有橘子,苹果和柠檬的组合,这些项目的实际价值是我们不知道有没有办法按指数选择的方法?

或者也许根据displayValue检索值?

这样的工作:

  this.comboBox().setValue(7);

但是如果我只有我想要选择的displayValue呢?让我们说' Oranges',如何从组合中选择它?

2 个答案:

答案 0 :(得分:2)

你可以做到这一点的一种方法是通过execute()。想法是在组合框的商店中找到正确的记录,从中检索id,然后使用id设置正确的值。

在浏览器内情景中,您可以通过检查组合框的商店直接执行此操作。但是,在基于WebDriver的场景中,您无法访问规范中运行应用程序的上下文,因此execute()是最简单的方法(通过API无法通过其他方式)那里。这是一个简单的例子:

// Component
Ext.define('Sandbox.view.test.combobox.Base', {
    extend: 'Ext.form.field.ComboBox',
    id: 'futureCmp',
    displayField: 'text',
    valueField: 'id',
    store: {
        fields: ['id', 'text'],
        data: [
            [1, 'Apples'],
            [2, 'Oranges']
        ]
    }
});

// Spec
it('should select correct value from displayField', function () {
    var combo = ST.comboBox('@futureCmp');

    combo
        .execute(function (cmp) {
            // we're in the target context now, so we *can* 
            // interact with Ext JS now
            // we could return an object if needed, but we only need the id
            return cmp.getStore().findRecord('text', 'Oranges').get('id');
        })
        .and(function () {
            // "executeResult" is the value returned from execute()
            // in this case, it's the id of the item we want to select
            var id = this.future.data.executeResult;
            combo.setValue(id);
            // assert that the value has been correctly selected
            combo.value(id);
        });
});

这种方法很好的部分是它可以在场景类型之间移植;因为我们只使用API​​,所以我们可以轻松地在基于浏览器和基于Web驱动程序的场景之间切换并运行相同的测试(实际上,这是从一些内部测试中借用的,这些测试正是如此)。

最后,我们在功能请求跟踪器中有一个项目,用于将 select()样式方法添加到组合框架未来API,类似于Grid和数据视图。我不确定他们什么时候会进去,但我个人一直想要它一段时间:)

答案 1 :(得分:0)

您可以执行以下操作:ST.ComboBox('${ST_LOCATOR}').setValue('STRING_VALUE') 其中STRING_VALUE是组合框中可用的选项之一。

请注意,STRING_VALUE不是您在UI中看到的值。您可以在用户界面3D Pie和组件3d_pie中使用。第二个是你必须使用的那个。

如果组件不是一个真正的ComboBox而是一个更复杂的组件,那么您必须找到包含DOM元素和点击操作等的解决方法。