如何检查flutter driver(QA环境)中是否存在元素?

Deo*_*uza 3 testing dart flutter

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

sce*_*eee 5

根据Flutter issues #15852,目前还没有这种可能性。

但是用户 jonsamwell 在这个问题中提到的一种解决方法是使用waitForflutter driver 的方法,并将其包装在 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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

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