如何在flutter驱动程序(QA环境)中检查元素是否存在?

时间:2018-03-23 05:23:26

标签: testing dart flutter qa

我想检查一个元素是否存在。类似于返回布尔值的函数。或者类似于Selenium'ifExists'中的函数,如果元素不一定存在则不会抛出异常,并且在没有找到元素的情况下继续执行该过程而不会停止。 flutter_test上存在类似的东西,但到目前为止我还没有和flutter_driver一起使用它。

2 个答案:

答案 0 :(得分:0)

根据Flutter issue #15852,到目前为止,目前还没有这种可能性。

但是,用户jonsamwell在本期中提到的一种解决方法是,通过flutter驱动程序使用waitFor方法,并将其包装在try / catch中,以等待超时。如果超时,则该元素不存在;如果超时,则该元素存在:

  Future<void> testStep() async {
    final isOpen = await isPresent(find.byType("Drawer"), world.driver);
    if (isOpen) {
      ...
    }
  }

  Future<bool> isPresent(SerializableFinder finder, FlutterDriver driver, {Duration timeout = const Duration(seconds: 1)}) async {
    try {
      await driver.waitFor(finder, timeout: timeout);
      return true;
    } catch (e) {
      return false;
    }
  }

显然,您必须根据用例计算等待时间,以考虑任何加载时间。

答案 1 :(得分:0)

尝试捕获方法对我不起作用。

我写了一段和平的代码来为我做花招

Future<bool> isPresent(SerializableFinder finder, FlutterDriver driver, {Duration timeout = const Duration(seconds: 1)}) async {
    Stopwatch s = new Stopwatch();
    s.start();
    await driver.waitFor(finder, timeout: timeout);
    s.stop();

    if(s.elapsedMilliseconds >= timeout.inMilliseconds){
      return false;
    }else{
      return true;
    }
  }

Future<void> testStep() async {
    final exists = await isPresent(find.byValueKey("accountMenu"), driver);
    if (exists ) {
      ...
    }
  }

如果“ driver.waitFor”函数找到我们的小部件所花费的时间超过了超时时间,则该小部件不存在。