Javascript 触发web浏览器控件内的html按钮
在我的web浏览器控件中,我正在访问一个表单:Javascript 触发web浏览器控件内的html按钮,javascript,c#,vb.net,winforms,webbrowser-control,Javascript,C#,Vb.net,Winforms,Webbrowser Control,在我的web浏览器控件中,我正在访问一个表单: <form role="form"> <div class="form-group"> <input type="text" class="form-control" id="InputEmail1" placeholder="name..."> </div> <div class="form-group"> <input ty
<form role="form">
<div class="form-group">
<input type="text" class="form-control" id="InputEmail1" placeholder="name...">
</div>
<div class="form-group">
<input type="email" class="form-control" id="InputPassword1" placeholder="email...">
</div>
<div class="form-group">
<textarea class="form-control" rows="8" placeholder="message..."></textarea>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
我无法访问按钮和文本区域,因为它没有id或名称?他们有可能这样做吗?您的元素需要有ID,如果您没有访问html代码的权限,您可以像这样枚举元素,但您必须知道哪个元素是正确的:
foreach (HtmlElement element in WebBrowser1.Document.Forms[0].All)
{
if (element.TagName.ToLower() == "textarea".ToLower())
{
element.InnerText = "text";
}
}
要单击按钮,请尝试以下操作:
element.InvokeMember("click");
在许多web自动化中,除非您可以让原始开发人员添加ID,否则您必须在DOM中导航才能找到所需的内容 下面是一个进行这种过滤和web自动化的示例
var actionPanel = topPanel.insert_Above(40);
var ie = topPanel.add_IE_with_NavigationBar().silent(true);
var server = "http://127.0.0.1.:8080";
Action<string,string> login =
(username, password) => {
ie.open(server + "/jpetstore/shop/signonForm.do");
ie.field("username",username);
ie.field("password",password);
ie.buttons()[1].click();
};
Action loginPlaceAnOrderAndGoToCheckout =
()=>{
ie.open("http://127.0.0.1:8080/jpetstore");
ie.link("Enter the Store").click();
//login if needed
var signOffLink = ie.links().where((link)=> link.url().contains("signonForm.do")).first();
if(signOffLink.notNull())
{
signOffLink.click();
login("j2ee", "pwd1");
}
ie.links().where((link)=> link.url().contains("FISH"))[0].click();
ie.link("FI-FW-01 ").flash().click();
ie.links().where((link)=> link.url().contains("addItemToCart"))[0].flash().click();
ie.links().where((link)=> link.url().contains("checkout.do"))[0].flash().click();
ie.links().where((link)=> link.url().contains("newOrder.do"))[0].flash().click();
};
Action scrollToTotal =
()=>{
var tdElement = ie.elements().elements("TD").toList().Where((element)=> element.innerHtml().notNull() && element.innerHtml().contains("Total:")).first();
tdElement.scrollIntoView();
tdElement.injectHtml_beforeEnd("<h2><p align=right>Look at the Total value from the table above (it should be 18.50)</p><h2>");
};
Action<string> exploit_Variation_1 =
(payload) => {
loginPlaceAnOrderAndGoToCheckout();
ie.buttons()[1].flash().click();
ie.open(server + "/jpetstore/shop/newOrder.do?_finish=true&" + payload);
scrollToTotal();
};
Action<string> exploit_Variation_1_SetTotalPrice =
(totalPrice) => {
var payload = "&order.totalPrice={0}".format(totalPrice);
exploit_Variation_1(payload);
};
var actionPanel=topPanel.在上面插入(40);
var ie=topPanel.add_ie_with_NavigationBar().silent(true);
var服务器=”http://127.0.0.1.:8080";
操作登录=
(用户名、密码)=>{
ie.open(server+“/jpetstore/shop/signonForm.do”);
ie.field(“用户名”,用户名);
ie.field(“密码”,password);
ie.按钮()[1]。单击();
};
操作登录PlaceAnoroderandGotocheckout=
()=>{
即打开(“http://127.0.0.1:8080/jpetstore");
ie.link(“进入商店”)。单击();
//如果需要,请登录
var signOffLink=ie.links()。其中((link)=>link.url().包含(“signonForm.do”)。first();
if(signOffLink.notNull())
{
signOffLink.click();
登录(“j2ee”、“pwd1”);
}
ie.links()。其中((link)=>link.url()。包含(“鱼”))[0]。单击();
ie.link(“FI-FW-01”).flash().点击();
ie.links().where((link)=>link.url().contains(“addItemToCart”))[0].flash().click();
ie.links().where((link)=>link.url().contains(“checkout.do”))[0].flash().click();
ie.links().where((link)=>link.url().contains(“newOrder.do”))[0].flash().click();
};
动作滚动总计=
()=>{
var tdElement=ie.elements().elements(“TD”).toList()。其中((element)=>element.innerHtml().notNull()&&element.innerHtml()。包含(“总计:).first();
tdElement.scrollIntoView();
tdElement.injectHtml_beforeed(“查看上表中的总值(应为18.50)
”;
};
操作利用率\u变化\u 1=
(有效载荷)=>{
LoginPlaceAnoroderandGotocheckout();
ie.buttons()[1].flash().click();
ie.open(server+“/jpetstore/shop/newOrder.do?\u finish=true&“+payload);
scrollToTotal();
};
操作利用率\u变化\u 1\u设置总价格=
(总价)=>{
var payload=“&order.totalPrice={0}”。格式(totalPrice);
利用变化量1(有效载荷);
};
另一个选项(我也经常使用)是实际使用Javascript来执行这些操作(如果jQuery在目标页面中可用(或注入),这会容易得多)
[Test]公共作废问题\u 681\u导航\u库\u视图\u文件夹\u单击\u图标\u无效()
{
var tmWebServices=新的TM_WebServices();
函数clickOnNodeUsingJQuerySelector=
(jQuerySelector)=>
{
ie.invokeEval(“TM.Gui.selectedGuidanceTitle=未定义”);
ie.invokeEval(“$”(“#{0}”).click()”.format(jQuerySelector));
ie.waitForJsVariable(“TM.Gui.selectedGuidanceTitle”);
返回ie.getJsObject(“TM.Gui.selectedGuidanceTitle”);
};
if(tmProxy.libraries().notEmpty())
{
“确保存在的唯一库是TM文档”。info();
foreach(tmProxy.libraries()中的var库)
if(library.Caption!=“TM文档”)
{
“删除库:{0}.debug(library.Caption);
tmProxy.library\u Delete(library.Caption);
}
}
UserRole.Admin.assert();
tmProxy.library_Install_Lib_Docs();
tmProxy.cache_Reload__Data();
tmProxy.show_contenttononymousers(true);
ieTeamMentor.page_Home();
//tmWebServices.script_Me_WaitForClose();;
//ieTeamMentor.script_IE_WaitForComplete();
ie.waitForJsVariable(“TM.Gui.selectedGuidanceTitle”);
var_jsTree=tmWebServices.JsTreeWithFolders();
var viewNodes=_jsTree.data[0]。children;//硬编码到第一个库
var view1_Id=viewNodes[0].attr.Id;
var view5_Id=viewNodes[4].attr.Id;
var单击“查看”按钮,使用“A=clickOnNodeUsingJQuerySelector(视图Id+“A”);
var单击“查看”按钮,使用“A=clickOnNodeUsingJQuerySelector(视图Id+“A”);
var单击“使用图标查看”按钮=clickOnNodeUsingJQuerySelector(视图Id+“ins”);
var单击“使用图标查看”按钮=clickOnNodeUsingJQuerySelector(视图Id+“ins”);
(单击“使用”按钮查看1);单击“使用”按钮查看5);
(使用图标单击查看)。断言错误();/(问题681)这是正确的,因为视图未更新
(单击使用图标查看);
}
am正在使用windows应用程序,您需要从该windows应用程序控制WebBrowser控件,对吗?这些代码示例是从Windows.NET应用程序(或相当于WinForms应用程序的单元)运行的
var actionPanel = topPanel.insert_Above(40);
var ie = topPanel.add_IE_with_NavigationBar().silent(true);
var server = "http://127.0.0.1.:8080";
Action<string,string> login =
(username, password) => {
ie.open(server + "/jpetstore/shop/signonForm.do");
ie.field("username",username);
ie.field("password",password);
ie.buttons()[1].click();
};
Action loginPlaceAnOrderAndGoToCheckout =
()=>{
ie.open("http://127.0.0.1:8080/jpetstore");
ie.link("Enter the Store").click();
//login if needed
var signOffLink = ie.links().where((link)=> link.url().contains("signonForm.do")).first();
if(signOffLink.notNull())
{
signOffLink.click();
login("j2ee", "pwd1");
}
ie.links().where((link)=> link.url().contains("FISH"))[0].click();
ie.link("FI-FW-01 ").flash().click();
ie.links().where((link)=> link.url().contains("addItemToCart"))[0].flash().click();
ie.links().where((link)=> link.url().contains("checkout.do"))[0].flash().click();
ie.links().where((link)=> link.url().contains("newOrder.do"))[0].flash().click();
};
Action scrollToTotal =
()=>{
var tdElement = ie.elements().elements("TD").toList().Where((element)=> element.innerHtml().notNull() && element.innerHtml().contains("Total:")).first();
tdElement.scrollIntoView();
tdElement.injectHtml_beforeEnd("<h2><p align=right>Look at the Total value from the table above (it should be 18.50)</p><h2>");
};
Action<string> exploit_Variation_1 =
(payload) => {
loginPlaceAnOrderAndGoToCheckout();
ie.buttons()[1].flash().click();
ie.open(server + "/jpetstore/shop/newOrder.do?_finish=true&" + payload);
scrollToTotal();
};
Action<string> exploit_Variation_1_SetTotalPrice =
(totalPrice) => {
var payload = "&order.totalPrice={0}".format(totalPrice);
exploit_Variation_1(payload);
};
[Test] public void Issue_681__Navigating_libraries_views_folders__Clicking_the_icon_doesnt_work()
{
var tmWebServices = new TM_WebServices();
Func<string, string> clickOnNodeUsingJQuerySelector =
(jQuerySelector)=>
{
ie.invokeEval("TM.Gui.selectedGuidanceTitle=undefined");
ie.invokeEval("$('#{0}').click()".format(jQuerySelector));
ie.waitForJsVariable("TM.Gui.selectedGuidanceTitle");
return ie.getJsObject<string>("TM.Gui.selectedGuidanceTitle");
};
if (tmProxy.libraries().notEmpty())
{
"Ensuring the the only library that is there is the TM Documentation".info();
foreach(var library in tmProxy.libraries())
if(library.Caption != "TM Documentation")
{
"deleting library: {0}".debug(library.Caption);
tmProxy.library_Delete(library.Caption);
}
}
UserRole.Admin.assert();
tmProxy.library_Install_Lib_Docs();
tmProxy.cache_Reload__Data();
tmProxy.show_ContentToAnonymousUsers(true);
ieTeamMentor.page_Home();
//tmWebServices.script_Me_WaitForClose();;
//ieTeamMentor.script_IE_WaitForComplete();
ie.waitForJsVariable("TM.Gui.selectedGuidanceTitle");
var _jsTree = tmWebServices.JsTreeWithFolders();
var viewNodes = _jsTree.data[0].children; // hard coding to the first library
var view1_Id = viewNodes[0].attr.id;
var view5_Id = viewNodes[4].attr.id;
var click_View_1_Using_A = clickOnNodeUsingJQuerySelector(view1_Id + " a" );
var click_View_5_Using_A = clickOnNodeUsingJQuerySelector(view5_Id + " a" );
var click_View_1_Using_Icon = clickOnNodeUsingJQuerySelector(view1_Id + " ins" );
var click_View_5_Using_Icon = clickOnNodeUsingJQuerySelector(view5_Id + " ins" );
(click_View_1_Using_A != click_View_5_Using_A ).assert_True();
(click_View_5_Using_A == click_View_1_Using_Icon).assert_False(); // (Issue 681) this was true since the view was not updating
(click_View_5_Using_A == click_View_5_Using_Icon).assert_True();
}