2015-04-22 3 views
-1

Я написал этот цикл ниже. Он отлично работает на первой итерации; Однако, во второй итерации, он возвращает следующее сообщение об ошибке:Петля работает неправильно

Unable to locate element: 

    {"method":"xpath","selector":"html/body/header[2]/div[2]/nav/ul/li[2]/a"}` 

Command duration or timeout: `120.06` seconds 

Код петли упоминается ниже:

Workbook w2; 
    w2 = Workbook.getWorkbook(new File("C:\\Users\\pcs\\Desktop\\flightdata.xls")); //flight data destintion location will be same as source from flight data. 
    Sheet s2 = w2.getSheet(0); 

    for (k = 1; k < s2.getRows(); k++) 
    { 
     //redeem flow 
     d1.findElementByXPath("html/body/header[2]/div[2]/nav/ul/li[2]/a").click(); 
     d1.findElementByXPath("html/body/header[2]/div[2]/nav/ul/li[2]/ul/li[3]/a").click(); 
     d1.findElement(By.xpath("html/body/section/div[1]/form/div/div[2]/div[1]/div/div[1]/input")).sendKeys(s2.getCell(0, k).getContents()); 

     //pause for list to be populated 
     try 
     { 
     Thread.sleep(1000L); 
     } 
     catch (Exception e) 
     { 
     } 

     //Get all items in autocomplete list 
     List<WebElement> items1 = d1.findElements(By.xpath("html/body/ul/li[3]/a")); 

     //Look for item 
     for(i= 0; i <items1.size();i++) 
     { 
     if(items1.get(i).getText().contains(s2.getCell(0, k).getContents())) 
     { 
      items1.get(i).click(); 
      break; 
     } 
     } 

     //calendar handling 
     d1.findElementById("checkin").click(); 
     d1.findElementByXPath("html/body/div[2]/div[2]/div/a/span").click(); 
     d1.findElementByXPath("html/body/div[2]/div[2]/table/tbody/tr[3]/td[3]/a").click(); 

     //Select Number of Rooms 
     d1.findElementById("roomscount").sendKeys("1"); 

     //Select Room type  
     d1.findElementById("roomtype").sendKeys("Single"); 

     //Occupant's Nationality  
     d1.findElementById("nationality").sendKeys("India"); 

     //Click search button  
     d1.findElementByXPath("html/body/section/div[1]/form/div/div[2]/div[4]/input").click(); 

     //after 2 min wait    
     d1.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS); 
    } 

POST ПОИСК HTML PAGE

<!DOCTYPE html> 
    <html> 
    <head> 
    <body class="" ondrop="return false;" ondragstart="return false;" onunload="" onpageshow="if (event.persisted) noBack();" onload="noBack();"> 
    <header> 
    <div class="logo"> 
    <div class="right"> 
    <ul class="login"> 
    <nav class="links"> 
    <ul> 
    <li> 
    <li> 
    <a href="#">Redeem sMiles</a> 
    <ul> 
    <li class="pointer sprite"> </li> 
    <li class="flight"> 
    <li class="hotel"> 
    <a href="hotel.html?action=hotels"> 
    <span class="sprite"> </span> 
    Hotels 
    </a> 
    </li> 
    <li class="smiles"> 
    </ul> 
    </li> 
    </ul> 
    </nav> 
    <div class="clear"></div> 
    </div> 
    <div class="clear"></div> 
    </header> 
    <div class="clear"></div> 
    <script src="/fm/travel/js/hotel.js" type="text/javascript"> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    <link type="text/css" rel="stylesheet" href="/fm/styles/demo_table_jui.css"> 
    <link rel="stylesheet" href="/fm/travel/styles/ui-lightness/jquery-ui-1.10.4.css"> 
    <link rel="stylesheet" href="/fm/travel/styles/ui-lightness/autocomplete.css"> 
    <script src="/fm/travel/js/jquery-1.10.2.js" type="text/javascript"> 
    <script src="/fm/travel/js/jquery-ui-1.10.4.js" type="text/javascript"> 
    <script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false"> 
    <script type="text/javascript"> 
    <script type="text/javascript"> 
    <script type="text/javascript"> 
    <div id="loader" style="display: none;"> 
    <div id="modifySearchBlock" style="display: block;"> 
    <div class="clear"></div> 
    <footer> 
    <script src="/fm/travel/js/jquery.js"> 
    <script src="/fm/js/bootstrap.min.js"> 
    <script src="/fm/js/jquery.meanmenu.js"> 
    <script> 
    <script src="/fm/js/jquery.simpleGal.js"> 
    <script> 
    <script src="/fm/js/owl.carousel.js"> 
    <script> 
    <div id="ui-datepicker-div" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div> 
    <ul id="ui-id-1" class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all " tabindex="0" style="display: none;"></ul> 
    </body> 
    </html> 

выше код принадлежит странице, на которой я возвращаюсь после завершения поиска.

Опять мне нужно, чтобы перейти к ссылке ниже, чтобы сделать поиск:

enter image description here

<li class="flight"> 
<li class="hotel"> 
<a href="hotel.html?action=hotels"> 
<span class="sprite"> </span> 
Hotels 
</a> 
</li> 
<li class="smiles"> 
</ul> 
</li> 

Приведенный выше код относится к ссылке, которую мне нужно нажать кнопку. пожалуйста, укажите те же предложения.

+2

ваш селектор ** чрезвычайно ** хрупкий .. вы можете поделиться некоторыми HTML, чтобы мы могли дать некоторые рекомендации? – sircapsalot

+0

обязательно ... вам нужна страница html для поиска по страницам или страница предварительного поиска html? –

+0

оба, просто включите его в свой ответ. Самое главное, поделитесь элементами html, которые выбирает ваш xpath. – sircapsalot

ответ

-1

Ну, проблема, с которой столкнулся мой код, заключается в том, что когда поиск завершается, я пытаюсь щелкнуть веб-элементы с теми же старыми xpaths. Собственно, при тщательном анализе я обнаружил, что xpaths тех же webelements на странице результатов немного изменились, из-за чего мой скрипт не смог распознать элементы в новом местоположении.

Следовательно, я только что изменил xpaths и проблема решена.

+0

Не понимаю, что это было именно то, что я сказал «Или проверить, в каком состоянии вы находитесь в конце цикла». – segalaj

1

Прежде всего, вы должны взглянуть на другой селектор, отличный от xpath, который не читается и может быть dangerous, here вы найдете много способов найти элементы. Например, cssSelector - очень надежный способ поиска элемента.
Еще одно преимущество заключается в том, что ваш код становится более читаемым.

Если я понимаю, первая итерация не проблема, то вторая, это щелчок по выпадающему списку в верхней части страницы, что приводит к сбою.

Возможное решение заключается в том, что ваша страница не вернется в исходное состояние в конце вашего цикла. Вы можете обновить страницу в конце цикла:

driver.navigate().refresh(); 

Или проверьте, в каком состоянии вы находитесь в конце цикла.

Надеюсь, что это поможет.

+0

эй спасибо много приятель .. попробуем освежить .. спасибо за напоминание ..! :) –

+0

это не сработало для меня. После этого петля становится повесить после первого итерации –

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