等待菜单动画展开div

问题描述

使用PuppeteerSharp,如何等待元素完成扩展?

this other issue非常相似,我有一个菜单,单击后会滑动打开。我正在尝试点击扩展div中的链接

我为Visible = true尝试了waiting,但是我认为它在停止扩展之前就已经可见。 (它不会单击#bar。)

var waitOptions = new WaitForSelectorOptions() { Visible = true };
var waitTask = page.WaitForSelectorAsync("#bar",waitOptions);
var clickTask = page.ClickAsync("#foo");
await Task.WhenAll(waitTask,clickTask); // the next line works if I put a breakpoint here
await page.ClickAsync("#bar");

solution对JS中的Puppeteer有意义。但是ElementHandle没有类似addEventListener的东西,并且我找不到transitionend的任何受支持的事件。

async waitFortransitionend(element) {
  await page.evaluate((element) => {
    return new Promise((resolve) => {
      const transition = document.querySelector(element);
      const onEnd = function () {
        transition.removeEventListener('transitionend',onEnd);
        resolve();
      };
      transition.addEventListener('transitionend',onEnd);
    });
  },element);
}

所以我尝试仅通过C#实现该JavaScript,但它从未完成...

也许我在事件监听器上做错了事...

不幸的是,我没有很好的例子来再现它。

    var divSelector = "#foo";
    var expandMenuTask = page.EvaluateFunctionAsync(@"(element) => {
        return new Promise((resolve) => {
          const transition = document.querySelector(element);
          const onEnd = function () {
            transition.removeEventListener('transitionend',onEnd);
            resolve();
          };
          transition.addEventListener('transitionend',onEnd);
        });
      }",divSelector);

    var clickTask = page.ClickAsync(divSelector);

    await Task.WhenAll(expandMenuTask,clickTask);

我可能最终选择Task.Delay(1000)。只是在寻找正确的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)