2016-06-09 4 views
1

Я использую HTMLunit для входа на страницу, а затем для загрузки файла. До сих пор я мог войти, но я не могу найти форму. Это дает мне ошибку, что он не может найти элемент, но он существует на странице HTML.HTML-блок не может найти форму по какой-либо причине. Я подозреваю из-за angularJS, но не уверен

JAVA CODE.

public static void main(String[] args) { 
    WebClient webClient = new WebClient(); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    // webClient.getOptions().set(true); 

    webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
    try { 
     HtmlPage page = (HtmlPage) webClient 
       .getPage("https://controlcenter-itv2.centurylink.com/business/controlcenter/home"); //loggin into this page 
     HtmlForm form = page.getFormByName("lqLogin");  //grabbing the form on the page 
     ((HtmlInput) form.getFirstByXPath("//*[@id='userId']")).setValueAttribute("*****");  //setting up the username for the field 
     HtmlInput passWordInput = form.getInputByName("password"); 
     passWordInput.removeAttribute("disabled"); 
     passWordInput.setValueAttribute("****"); // password for the field 

     HtmlPage page1 = form.getInputByValue("Login").click(); // works fine 
     HtmlPage page2= (HtmlPage) webClient.getPage("https://controlcenter-itv2.centurylink.com/business/controlcenter/ordering/initiate-orders-whsl/batch"); 
     System.out.println(page2.asText()); 


     HtmlForm form1 = page2.getFormByName("orderForm"); //doesnt work 
         //page2.getFirstByXPath("//*[@id='batchUpload']"); 

     // page1 = form1.getInputByValue("Browse").click(); 




     //*[@id="fileName"] 



     HtmlFileInput input = (HtmlFileInput)form1.getFirstByXPath("//*[@id='fileName']"); //trying to get the form on the upload page not working 

     // input.setContentType("text/html"); 

      //file that needs to be uploaded 
     //input.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 

     input.setValueAttribute("file:/C:\fileuploadTEST.txt"); 

Это HTML код

<form id="batchOrderForm" class="ng-pristine ng-valid" name="orderForm"> 

Это ошибка, я получаю

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[form] attributeName=[name] attributeValue=[orderForm] 
    at com.gargoyles[enter image description here][1]oftware.htmlunit.html.HtmlPage.getFormByName(HtmlPage.java:644) 
+0

У вас есть вложенная форма на странице? Раньше у меня была аналогичная проблема, и я ударился головой о стену, пока не узнал ... – poashoas

+0

Ist тега в 'id' вы должны пойти по атрибуту id, а не по атрибуту name. – MrSmith42

ответ

0

Форма не на странице, когда я загрузить его с отключенным JavaScript, поэтому я предположим, что он добавлен позже javascript.

Таким образом, ваша проблема может заключаться в том, что вам нужно ждать появления формы.

В общем поиске проблемы таким образом:

Если, например, форма не найдена, я просто регистрирую источник страницы, прежде чем пытаюсь получить доступ к элементу.

В вашем случае:

HtmlPage page2= (HtmlPage) webClient.getPage("https://controlcenter-itv2.centurylink.com/business/controlcenter/ordering/initiate-orders-whsl/batch"); 
     System.out.println(page2.asXml()); 


     HtmlForm form1 =(HtmlForm) page2.getElementById("batchOrderForm"); 

Чем я взглянуть на выходе журнала, если нужный элемент может быть найден в выводе. Часто мне нужно дождаться, когда некоторые javascrit закончат изменение источника страницы.

 Смежные вопросы

  • Нет связанных вопросов^_^