mas*_*san 13 c# browser visual-studio-2005 selenium-ide comobject
我正在寻找一种方法来获取onclick中定义的JavaScript代码.我正在使用.NET 2.0 C#Visual Studio 2005.
例:
<span id="foo" onclick+"window.location.href='someURL'>click here</span>
Run Code Online (Sandbox Code Playgroud)
我的目标是获取字符串"window.location.href ='someURL'".
场景:
用户点击Web页面元素,例如上面显示的标记,在WebBrowser控件内部.然后点击标签被吹罚至H tmlElement object.
在WebBrowser控件中我然后调用HtmlElement object's getAttribute("onclick")它,它只给我" System .__ ComObject".
我已经搜索了如何处理它然后发现它可以被铸造然后获得价值.
if (tag.GetAttribute("onclick").Equals("System.__ComObject"))
{
Console.WriteLine("dom elem >>>>>>>>>>> " + tag.DomElement.ToString());
mshtml.HTMLSpanElementClass span = (mshtml.HTMLSpanElementClass)tag.DomElement;
Console.WriteLine("js value ===>" + span.onclick);
}
Run Code Online (Sandbox Code Playgroud)
输出:
dom elem >>>>>>>>>>> mshtml.HTMLSpanElementClass
js value ===> System.__ComObject
Run Code Online (Sandbox Code Playgroud)
如图所示,span.onclick仍然给我System .__ ComObject,我做错了什么?
在为什么的HtmlElement的的getAttribute()方法返回"mshtml.HTMLInputElementClass",而不是属性的值? 这家伙说它在他的情况下工作,我跟着它,但我的有点不工作......
UPDATE
研究,研究.....
我可以在我的C#项目中添加引用VisualBasic.dll然后调用该方法来找出这个系统是谁.__ ComObject确实是.
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(span.onclick));
Run Code Online (Sandbox Code Playgroud)
输出:
JScriptTypeInfo
Run Code Online (Sandbox Code Playgroud)
看起来这是一个JScript类型......我该如何访问这个对象?
更多详情
以上描述基于我目前的项目.该项目旨在创建像Selenium IDE这样的东西.它使用WebBrowser控件.
Selenium IDE创建了3种不同的东西来记录Web文档中的元素.
1. actionType
2. xpath
3. value
Run Code Online (Sandbox Code Playgroud)
例如,
type, //input[@id=foo], "hello world"
clickAndWait, //link=login, ""
Run Code Online (Sandbox Code Playgroud)
Selenium IDE识别页面加载,因此它在"click"和之间更改actionType "clickAndWait".我的情况,我想说的很简单.
如果我点击该元素,如果它是anchor tag或有页面加载类型的javascript,onclick=window.location.href='blah'然后我想将actionType设置为"clickAndWait".
有很多方法可以做到.
另一种方法是使用自定义导航网址并对其进行操作
另一种Alternative方法是使用External对象,WebBrowser允许您设置一个ObjectForScripting,您可以在HTML的Javascript中访问它.
[ComVisible(true)]
public class MyClass
{
// can be called from JavaScript
public void ShowMessageBox(string msg){
MessageBox.Show(msg);
}
}
myBrowser.ObjectForScripting = new MyClass();
// or you can reuse instance of MyClass
Run Code Online (Sandbox Code Playgroud)
你可以打电话,
window.external.ShowMessageBox("This was called from JavaScript");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7549 次 |
| 最近记录: |