Почему все данные моей страницы показывают StaleElementReferenceException - PullRequest
1 голос
/ 07 мая 2019

Ошибка, показывающая переполнение стека

public static void main(String[] args) throws Exception {
    System.setProperty("webdriver.chrome.driver","/home/arima/chromedriver/chromedriver");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
    driver.get("http://education-india.in/Education/Courses/?PageNumber=1");
    Thread.sleep(5000);

    List<WebElement> dropdown = driver.findElements(By.xpath("//select[@id='txtPageNumber']/option"));

    for(int k=1;k<dropdown.size()-1;k++) {
        List<WebElement> rows = driver.findElements(By.xpath("//table[@class='index']/tbody/tr"));
        List<WebElement> col = driver.findElements(By.xpath("//table[@class='index']/tbody/tr[1]/th"));

        for(int i=0;i<rows.size()-1;i++){
            System.out.println(rows.get(i).getText());
        }

        dropdown.get(k).click();
        Thread.sleep(4000);

        /*
         * WebDriverWait wait = new WebDriverWait(driver, 10);
         * wait.until(ExpectedConditions.presenceOfElementLocated(dropdown));
         */
    }
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Так как раскрывающийся список является элементом выбора. Вы можете использовать объект выбора, чтобы выбрать страницу.

Причиной ошибки ссылки на устаревший элемент является то, что при каждой загрузке страницы указатель раскрывающегося списка остается неизменным, но это не тот же элемент. Раскрывающийся список также обновляется. Вот почему вы должны найти раскрывающийся список после каждой загрузки страницы.

Попробуйте это:

    driver.get("http://education-india.in/Education/Courses/?PageNumber=1");
    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.elementToBeClickable(By.id("txtPageNumber")));

    List<WebElement> options = driver.findElements(By.xpath("//select[@id='txtPageNumber']/option"));

    for (int k = 0; k<options.size(); k++) {
        new Select(driver.findElement(By.xpath("//select[@id='txtPageNumber']"))).selectByIndex(k);

        List<WebElement> rows = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//table[@class='index']/tbody/tr")));
        List<WebElement> col = driver.findElements(By.xpath("//table[@class='index']/tbody/tr[1]/th"));

        for (int i = 0; i < rows.size()-1; i++) {
            System.out.println("PRE: "+rows.get(i).getText());
        }
    }
0 голосов
/ 07 мая 2019
stale element reference: element is not attached to the page document 

ОШИБКА возникает, когда веб-драйверу не удалось идентифицировать элемент на этой странице. Вам нужно переназначить свой выпадающий элемент внутри для loop.try приведенного ниже кода.

driver.get("http://education-india.in/Education/Courses/?PageNumber=1");
    WebDriverWait wait=new WebDriverWait(driver, 30);
        List<WebElement> dropdown =wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//select[@id='txtPageNumber']/option")));


        for(int k=1;k<dropdown.size()-1;k++) {
            List<WebElement> newdropdown =wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//select[@id='txtPageNumber']/option")));

            List<WebElement> rows = driver.findElements(By.xpath("//table[@class='index']/tbody/tr"));
            List<WebElement> col = driver.findElements(By.xpath("//table[@class='index']/tbody/tr[1]/th"));

            for(int i=0;i<rows.size()-1;i++){
                System.out.println(rows.get(i).getText());
            }

            newdropdown.get(k).click();

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...