直到/ WebDriverWait抛出NoSuchElementException

时间:2016-10-30 20:04:54

标签: python selenium xpath

根据我看到的每个答案和文档,以下内容应该等待xpath from collection import namedtuple Point = namedtuple('Point', 'x y z') mutable_z = Point(1,2,[3]) 处的元素:

path
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))) 。在任何人将此标记为副本或者在我之前打电话给我之前,我都知道this答案,虽然我正在寻找的元素是某种包装,但在尝试上述时我遇到了同样的问题寻找那个包装器(如果我只提供一个正常的NoSuchElementException调用而不是sleep调用它会使我认为我不需要手动输入包装器,它也可以工作。有一个等待加载元素的函数有什么意义,它不会等到元素被加载?任何帮助解决这个问题都将非常感激。

1 个答案:

答案 0 :(得分: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);
}