2014-12-14 4 views
2

내가 양식에 접근하고 웹 브라우저 컨트롤 내부에 HTML 버튼 : 트리거 내 웹 브라우저 컨트롤에서

<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> 

가 어떻게 vb.net 응용 프로그램에서 자동으로이 버튼을 트리거 할 수 있습니다? 어떻게 텍스트를 텍스트 영역으로 설정할 수 있습니까?

ID 나 이름이 없으므로 버튼과 텍스트 영역에 액세스 할 수 없습니까? 이럴 가능성이 있니?

답변

1

귀하의 요소 ID가 필요하고 HTML 코드에 액세스 할 수없는 경우이 같은 요소를 열거 할 수 있지만, 당신은 바로 하나입니다 요소를 알고 있어야합니다 :

foreach (HtmlElement element in WebBrowser1.Document.Forms[0].All) 
{ 
    if (element.TagName.ToLower() == "textarea".ToLower()) 
    { 
     element.InnerText = "text"; 
    } 
} 

버튼을 클릭에 대한 이 시도 : 웹 자동화를 많이에서

element.InvokeMember("click"); 
0

, 원래의 devs ID를 추가 얻을 수 없다면, 당신은 당신이 필요로하는 것을 찾기 위해 DOM을 탐색 할 수 있습니다. 여기

필터링 및 웹 자동화 그런 종류의 일을 예입니다

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

실제로 경우 훨씬 더 쉽게하는 (이러한 작업을 수행하는 자바 스크립트를 사용하는 것입니다 (나는 또한 꽤 많이 사용) 또 다른 옵션 jQuery는 대상 페이지에서 사용할 수 있습니다.

[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(); 
    } 
+0

Windows 응용 프로그램 –

+0

예, 해당 Windows 응용 프로그램에서 WebBrowser 컨트롤을 제어해야합니까? 이러한 코드 샘플은 Windows .NET 응용 프로그램 (또는 WinForms 응용 프로그램과 동일한 단위)에서 실행됩니다. –

관련 문제