2016-10-30 2 views
0

на основе каждого ответа и часть документации, которую я видел, следующие должны ждать элемента в XPath path:До/WebDriverWait метания NoSuchElementException

delay = some amount of time way longer than I know is needed 
driver = webdriver.Firefox() 
driver.get(url) 
wait = WebDriverWait(driver, delay, ignored_exceptions=NoSuchElementException) 
wait.until(EC.presence_of_element_located(driver.find_element_by_xpath(path))) 

, но независимо от того, что я делаю это всегда бросает NoSuchElementExceptionсразу после получения URL. И прежде чем кто-либо отметит это как дубликат или вызовет меня на этом, я знаю ответ this, и хотя элемент, который я ищу, находится в какой-то оболочке, у меня такая же проблема, когда вы пытаетесь найти выше эту оболочку вместо этого (также он работает, если я просто предоставляю обычный вызов sleep вместо Expected Condition, что заставляет меня думать, что мне не нужно вручную вводить в обертку). Какой смысл иметь функцию для ожидания загрузки элемента, который не ждет, пока элемент не будет загружен? Любая помощь в решении этой проблемы была бы весьма признательна.

ответ

0

Я использую этот код Java для подобных ситуаций:

private Wait<WebDriver> staleWait = new FluentWait<>(getDriver()) 
     .withTimeout(WAIT_INTERVAL, TimeUnit.SECONDS) 
     .pollingEvery(POLLING_INTERVAL, TimeUnit.MILLISECONDS) 
     .ignoring(NoSuchElementException.class) 
     .ignoring(StaleElementReferenceException.class); 


protected WebElement visibilityOf(WebElement webElement) { 
    staleWait.until((ExpectedCondition<Boolean>) webDriver -> { 
     try { 
      return element(webElement).isDisplayed(); 
     } catch (StaleElementReferenceException e) { 
      return false; 
     } catch (NoSuchElementException ne) { 
      return false; 
     } 
    }); 

    return element(webElement); 
}