异步命令到Selenium中的WebDriver



我正在尝试处理Selenium中异步函数的完成。 异步js函数必须在点击按钮后启动才能执行。

假设listenFor(arguments[0])侦听点击处理程序执行的结束,并在调度click action之前开始侦听它。在下一个函数中,我在使用 C# 的异步/等待Click action之前侦听单击事件。

private async void ExecuteJsAsync(IActionElement button)
{
Console.WriteLine("Started async function");
var result = Task<bool>.Factory.StartNew(() =>
{
Console.WriteLine("Started to listen");
var script = "listenFor(arguments[0])";
var executor = (IJavaScriptExecutor)browser;
return executor.ExecuteAsyncScript(script);
});
Console.WriteLine("Before click");
new Actions(browser).Click(button).Perform();
Console.WriteLine("After click");
_result = await result;
}

但是我正在获得下一个日志序列:

1. Started async function    
2. Before Click
3. Started to listen

在这里我们可以看到Click操作尚未调度。问题是:

  1. 是否可以使用Selenium异步执行多个任务(此处为Click actionlistener(?
  2. 为什么Selenium不能在这里向浏览器发送Click action
  3. Click这样的 Selenium 命令SendKeys在主 javascripts 线程中执行吗?

恕我直言,如果逻辑是这样的:

异步js函数必须在点击按钮后启动才能执行。

然后你需要做一些类似链的事情:

await Task.Run(() => { new Actions(browser).Click(button).Perform(); }).ContinueWith((_task) => { async code to execute AFTER Click (Perform method completion?) })

抱歉,还不知道硒的内在逻辑,所以不确定它是否可行。

相关内容

  • 没有找到相关文章

最新更新