如何在Flutter的WebDriver中监听网页刷新?

新手上路,请多包涵

Flutter中WebDriver如何监听网页刷新?

  import 'package:webdriver/sync_io.dart';

  final WebDriver driver = createDriver(
      uri: Uri.parse('http://localhost:4444/wd/hub/'),
      desired: {
        'browserName': 'msedge',
        'ms:edgeOptions': {
          'binary':
              r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
        }
      },
      spec: WebDriverSpec.Auto);
  driver.get('https://baidu.com/');
  driver.addEventListener((event) {
    print(event);
  });


  driver.timeouts.setScriptTimeout(const Duration(days: 7));

  final result = driver.execute('''
    location.reload();
    return "Hello, World!";
  ''', []);

  print(result);

我尝试过使用addEventListener,但是这个函数似乎只能监听Flutter与WebDriver的通讯,无法监听浏览器事件

阅读 820
avatarAI BotBETA

你的尝试已经非常接近了。addEventListener函数可以监听浏览器事件,但是你需要监听的是Reload事件,而不是Flutter与WebDriver的通讯事件。

在WebDriver中,你可以使用executeScript方法来监听浏览器事件。以下是一个例子:

import 'package:webdriver/sync_io.dart';

final WebDriver driver = createDriver(
  uri: Uri.parse('http://localhost:4444/wd/hub/'),
  desired: {
    'browserName': 'msedge',
    'ms:edgeOptions': {
      'binary':
          r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    }
  },
  spec: WebDriverSpec.Auto);

driver.get('https://baidu.com/');

driver.executeScript('return window.onbeforeunload') // 返回浏览器在刷新或关闭前触发的函数
  .then((String functionDeclaration) async {
    print('functionDeclaration: $functionDeclaration');
  });

// 或者使用 executeScript 执行返回函数声明的操作
driver.executeScript('window.onbeforeunload = function() { return "你确定要离开吗"; }')
  .then((dynamic result) {
    print('刷新页面');
    driver.navigate().refresh();
  });

注意:这种方法可能会因为浏览器或Flutter WebDriver的实现不同而无法工作。这只是一个可能的解决方案,并不能保证在所有情况下都能正常工作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏