<a class="button" style="letter-spacing: -1px" href="/home" data-executing="0">Go Home</a>
我想让Awesomium点击某个按钮,上面的例子中没有ID只有一个标签
<a - and attribute being Go Home
我一直在阅读如何做到这一点,他们说要使用它:
web.ExecuteJavascript(@"$('a').trigger('click');");
这对我不起作用,它不会产生点击。可能是因为我的测试网站有很多标签使用
<a
有没有办法通过使用&#34; a&#34;的属性来点击此按钮?正在&#34;回家&#34;在Awesomium?我也尝试了这个,它也没有用:
private void timer_Tick(object sender, EventArgs e)
{
if (web.IsDocumentReady)
{
dynamic document = web.ExecuteJavascriptWithResult("document");
dynamic submit = document.getElementsByTagName('a');
submit.Invoke("click");
}
}
答案 0 :(得分:2)
如果此元素不是<button>
,则可能没有click()
方法。
你可以试试看它:
JSObject btn = web.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0]");
if (btn.HasMethod("click"))
btn.Invoke("click");
else
// no such method
或使用dynamic(如果该方法不存在,将抛出异常):
dynamic btn = (JSObject) web.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0]");
btn.click();
您可以使用它来点击这些元素:
public void JsFireEvent(string getElementQuery, string eventName)
{
web.ExecuteJavascript(@"
function fireEvent(element,event) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent(event, true, false ); // event type,bubbling,cancelable
element.dispatchEvent(evt);
}
" + String.Format("fireEvent({0}, '{1}');", getElementQuery, eventName));
}
示例:
JsFireEvent("document.getElementsByTagName('a')[0]", "click");
JsFireEvent("document.getElementsByTagName('a')[0]", "mouseup");
另外,您可能会发现这两个简单的辅助类很有用:https://gist.github.com/AlexP11223/8286153
第一个是extension methods用于WebView / WebControl,第二个有一些静态方法来生成JS代码,用于通过XPath +获取JSObject的坐标来检索元素(JSObject)。