Awesomium点击标签C#

时间:2014-10-25 05:52:30

标签: javascript c# jquery awesomium

<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");
        }
    }    

1 个答案:

答案 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)。