2015-07-02 2 views
-1

Ниже код:findElements() возвращает NoSuchElementException вместо возвращения пустого списка

List<WebElement> listOfAllMatchingElements = driver.findElements(By.xpath(".//*[@id='e1MMenuRoot']/div/div[last()]")) 

ИЛИ

List<WebElement> listOfAllMatchingElements = driver.findElements(By.xpath(".//*[@id='e1MMenuRoot']/div/div[5]")) 

Теперь, как в моем понимании, это должно возвращать список веб-элементов или пустой список [ Учитывая, что xpath синтаксически корректен].

Вместо этого исключение [NoSuchElementException] вызывается с запутанным сообщением как «возвращенная непредвиденная ошибка». После является исключением,

org.openqa.selenium.NoSuchElementException: Finding elements with xpath == .//*[@id='e1MMenuRoot']/div/div[5]returned an unexpected error (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 1.37 seconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:17:10' 
System info: host: 'OTINWISRCDT050', ip: '172.24.187.38', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_71' 
*** Element info: {Using=xpath, value=.//*[@id='e1MMenuRoot']/div/div[5]} 
Session ID: a45d6015-f529-4e85-924e-3214076d59e8 
Driver info: org.openqa.selenium.ie.InternetExplorerDriver 
Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=9, ie.usePerProcessProxy=false, ignoreProtectedModeSettings=true, cssSelectorsEnabled=true, requireWindowFocus=false, initialBrowserUrl=http://localhost:31736/, handlesAlerts=true, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}] 

Код, используемый для элемента ожидания, как,

public boolean customElementWaitWithTimeoutWithProperties(WebDriver UtilDriver,By locatorWithLocation,int Timeout) 
{ 
    WebDriver driver = UtilDriver; 
    boolean elementFound=false; 

    int i=1; 
    try 
    { 

     while(i<=Timeout) 
     { 
      if(((Boolean.compare(elementFound,false)))==0) 
      { 


       List<WebElement> listOfAllMatchingElements = driver.findElements(locatorWithLocation); 
       if(!(listOfAllMatchingElements.isEmpty()) && (((Boolean.compare(elementFound,false)))==0)) 
       { 
        if(listOfAllMatchingElements.size()>1) 
        { 
         log.info("Common Methods :customElementWaitWithTimeout: More than one element is found for given location, check the location !!"); 

         elementFound=false; 
         break; 
        } 
        else if(listOfAllMatchingElements.size()==1 && (((Boolean.compare(elementFound,false)))==0)) 
        { 


         log.info("Common Methods :customElementWaitWithTimeout: Element found on "+i+" attempt !!"); 
         elementFound=true; 


         break; 

        } 
       } 
       else if ((listOfAllMatchingElements.isEmpty())) 
       { 

        log.info("Common Methods :customElementWaitWithTimeout: Element is not found on "+i+" attempt!!"); 

       } 
       Thread.sleep(1200); 
      } 
      i=i+1; 
     } 


    } 
    catch(Exception elementFoundCheck) 
    { 
     log.error("Common Methods[customElementWaitWithTimeout]: Exception caught !!"); 
     elementFoundCheck.printStackTrace(); 
    } 

    return elementFound; 
} 

[Дополнительная информация] Однако

, когда я поставил жесткий ждать в течение определенного времени [Для убедитесь, что элемент загружен] & написать письмо как

driver.findElement(By.xpath(".//*[@id='e1MMenuRoot']/div/div[5]")).click(); 

Элемент получает щелчок.

Любая причина/решение проблемы ?? [findElements() возвращение NoSuchElementException]

+0

Отсутствующие 'By' класс – Saifur

+1

Почему вы пишете пользовательских wait.When есть Явное ожидание уже реализовано в Selenium – Madhan

+0

Есть прочитать это: https://stackoverflow.com/help/mcve Как ваш вопрос стоит, он будет закрыт, так как «не может воспроизвести». – SiKing

ответ

2

Update

Почему вы изобретать колесо, написав свой собственный алгоритм ожидания, когда это already там. Refer

//wait for 20 seconds 
    WebDriverWait wait = new WebDriverWait(driver, 20); 
    List<WebElement> listOfAllMatchingElements=wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(".//*[@id='e1MMenuRoot']/div/div[last()]"))); 
+0

Извините, его ошибка копирования. Я исправлю это. Вы можете указать код ожидания элемента, который я разделяю для деталей. –

+0

@ShoaibShaikh вы можете исправить это обновление – Madhan

+0

Я пробовал ваше решение и его не работает таким образом. Тогда я попробовал подождать, пока один элемент и это сработало. wait.until (ExpectedConditions.presenceOfElementLocated (By.xpath (".//*[@ id = 'e1MMenuRoot']/div/div [last()]"))) –

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