我想使用C#开发一个web测试辅助工具(c/s程序)。
控制并打开浏览器,输入URL,然后鼠标悬停在页面某个DOM元素上,
就将该元素选中,用兰色框起来,单击这个元素
就可以弹出一个文本框以便输入给这个元素定义一个别名。
选中元素的操作是仿Firebug,IE Developer Toolbar 以及IBM Rational Functional Tester的手形拖拽的操作。
本辅助测试工具的目的是生成符合ruby语言规范的页面所有有意义的元素获取方法实体类,
为ruby+cucumber+watir自动化测试测试查找元素扫平道路。
有没有人给点鼠标悬停时选中元素的实现方法,现在仅仅实现了单击获取元素,谢谢。

解决方案 »

  1.   

    本人最近正在研究这方面的东西,本来是要做web数据抓取时候鼠标点击自动生成xpath路径的程序,也需要这个。现在实现了你需要的功能。
    添加引用:using mshtml;
    页面上放webBrowser控件。给Url一个网页地址。
    放一按钮button,click事件下:
                mshtml.HTMLDocument doc1 = (mshtml.HTMLDocument)this.webBrowser1.Document.DomDocument;   
                mshtml.HTMLDocumentEvents2_Event hevent = (mshtml.HTMLDocumentEvents2_Event)doc1;            hevent.onmouseout += new HTMLDocumentEvents2_onmouseoutEventHandler(hevent_onmouseout);
                hevent.onmouseover += new HTMLDocumentEvents2_onmouseoverEventHandler(hevent_onmouseover);
                hevent.onmousedown += new HTMLDocumentEvents2_onmousedownEventHandler(hevent_onmousedown);
    其中的三个方法:
    string oldcolor = "";
            void hevent_onmouseover(IHTMLEventObj e)
            {
                oldcolor = e.toElement.style.border;
                e.toElement.style.border = "2px solid blue";
                //this.textBox2.Text = e.toElement.parentElement.innerHTML;
                string path = "";
                IHTMLElement element = e.toElement;this.textBox3.Text = element.className;
                while (element.parentElement != null)
                {
                    IHTMLElementCollection elementCollection = element.parentElement.children as IHTMLElementCollection;
                    path = element.tagName + "(" + elementCollection.length + ")/" + path;
                    element = element.parentElement;
                }
                this.textBox3.Text = path;
            }        void hevent_onmouseout(IHTMLEventObj pEvtObj)
            {
                pEvtObj.fromElement.style.border = oldcolor;
            }        void hevent_onmousedown(IHTMLEventObj pEvtObj)
            {
                mshtml.HTMLDocument doc1 = (mshtml.HTMLDocument)this.webBrowser1.Document.DomDocument;
                mshtml.HTMLDocumentEvents2_Event hevent = (mshtml.HTMLDocumentEvents2_Event)doc1;
                hevent.onmouseover -= new mshtml.HTMLDocumentEvents2_onmouseoverEventHandler(this.hevent_onmouseover);
                pEvtObj.toElement.style.background = oldcolor;
                hevent.onmouseout -= new HTMLDocumentEvents2_onmouseoutEventHandler(this.hevent_onmouseout);
                hevent.onmousedown -= new HTMLDocumentEvents2_onmousedownEventHandler(hevent_onmousedown);
            }
    这样就实现了。运行,点击下按钮,然后鼠标放在某个DOM元素上,
    就将该元素选中,就会用兰色框起来。
    联系我:[email protected]