【发布时间】:2018-08-03 22:21:26
【问题描述】:
我正在尝试对某些页面元素(如 btn 或链接)进行简单的点击。
我编写了 2 个函数,用于通过 xpath 和 CSS 选择器进行点击。
这两个功能都可以在浏览器的开发者控制台中完美运行,但在 CEF 中部分不起作用。
- 代码在开发者控制台和 Cef 的简单链接中完美点击
- 代码完美地点击开发者控制台中的确切按钮,但不执行来自 CEF 的点击。它只是出于某种原因忽略它......
这怎么可能? js代码完全一样!...
public void Click(string xpath)
{
var js = "document.evaluate(\"" + xpath + "\", document, null, XPathResult.ANY_TYPE, null).iterateNext().click();";
EvaluateJavascript(js);
}
public void ClickCss(string css)
{
var js = "document.querySelector('"+ css + "').click()";
EvaluateJavascript(js);
}
public async Task EvaluateJavascript(string script)
{
JavascriptResponse javascriptResponse = await Browser.GetMainFrame().EvaluateScriptAsync(script);
if (!javascriptResponse.Success)
{
throw new JavascriptException(javascriptResponse.Message);
}
}
使用的点击代码:
_browser.ClickCss("#upload-container a");
再一次:相同的 js 代码在浏览器开发控制台中完美运行,但由于某种原因在 CEF 中无法运行。
顺便说一下,我已经在 Chrome 中测试过 JS 代码。所以 WebEngine 在这两种情况下都是一样的。
PS:我也可以模拟将某些特定文件拖放到某些特定 Web 元素。但是我没有找到任何关于这个的信息,不是针对Cef,不是针对Js,不是针对JQuery... =(
【问题讨论】:
-
尝试一个更简单的例子
-
@amaitland 但相同的代码在浏览器中工作。我没有在浏览器中收到“弹出窗口被阻止”消息。 OpenFileDialog 已在 Chrome 和 Firefox 中以相同的代码和相同的按钮成功打开。
-
@amaitland 关于更简单的示例(只是一个链接)在 Cef 中运行良好。我在我的问题中写了这个:)
-
CEF 也有开发工具,你可以用它们来调试。如果您尝试打开文件对话框,那么我相信您遇到了安全限制,请查看 devtools 中显示的消息。