【问题标题】:How to select a value from a DropdownButton using Flutter Driver?如何使用 Flutter Driver 从 DropdownButton 中选择一个值?
【发布时间】:2019-07-09 11:02:40
【问题描述】:

我想从表单中的 DropdownButton 中选择一个条目。我设法使用以下方法点击了按钮:

await driver.tap(find.byValueKey('object_type'));

我现在怎样才能找到一个条目? DropdownMenuItem 条目是使用数据库中的值动态生成的。我认为为每个值设置一个键有点尴尬,所以我尝试了以下方法:

await driver.tap(find.byValueKey('object_type'));
await driver.waitFor(find.text('Car'));
await driver.tap(find.text('Car'));

但是,这不起作用,因为我遇到了超时。

【问题讨论】:

  • 什么时候超时?在waitFortap 上?单击下拉菜单时,您是否看到其中的所有值?
  • @DK15:菜单已打开,我可以看到所有值。超时发生在水龙头上。我也尝试使用密钥,但我收到相同的消息:[警告] FlutterDriver:点击消息需要很长时间才能完成...
  • 我明白了。我对下拉选择进行了测试,它可以工作。我所做的是->点击显示所有值的下拉列表中显示的当前文本->等待驱动程序找到要选择的值->点击要选择的值,这就是您正在做的。在尝试点击 Car 之前,您可以尝试使用 getText 吗?喜欢expect (driver.getText(find.text('Car')), isNotNull);
  • @DK15:当我注意到超时消息实际上不是来自对值的点击,而是来自对 DropdownButton 本身的点击时,我只是想尝试一下!奇怪的是,菜单中的所有值都是可见的。
  • 你能分享dropdownbutton是如何实现的完整代码以及有助于复制问题的相关代码吗?

标签: flutter dart flutter-test


【解决方案1】:

我也遇到了同样的问题,但是我可以使用下面的代码解决问题

       final drop = find.byValueKey('object_type');
       // First, tap the dropdown button.
       await driver.tap(drop);
       await driver.tap(find.text('Car'));
       expect(await driver.getText(find.text('Car')), isNotNull);

假设下拉列表有大量数据,那么我们需要向下滚动下拉列表并搜索期望值。

       final SerializableFinder dropFinder = find.byValueKey('object_type');    
       await driver.scroll(dropFinder , 0, -200, Duration(milliseconds: 3000));
       await driver.tap(find.text('Car'));
       expect(await driver.getText(find.text('Car')), isNotNull);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2021-09-02
    • 2019-02-03
    • 2021-05-25
    • 2021-10-10
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多