Добавить данные, скопированные с разных веб-страниц, в массив - PullRequest
0 голосов
/ 18 декабря 2018

Я работаю над проектом, который включает в себя очистку данных с веб-сайтов, и я столкнулся с проблемой.Я хочу очистить данные с одной веб-страницы, добавить их в массив, затем переместить сканер на следующую страницу и выполнить то же самое, и т. Д., И т. Д., Но когда я выполняю свой код, предыдущие данные перезаписываются, и в конце ятолько удалили данные с последней веб-страницы.Я также сталкиваюсь с ошибкой: Исключение в потоке "main" org.openqa.selenium.StaleElementReferenceException: ссылка на устаревший элемент: элемент не прикреплен к документу страницы (информация о сеансе: chrome = 71.0.3578.98) (информация о драйвере:chromedriver = 2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8), платформа = Mac OS X 10.13.6 x86_64) (ПРЕДУПРЕЖДЕНИЕ: сервер не предоставил никакой информации о трассировке стека) Продолжительность или время ожидания команды: 0 миллисекунд

нижекод и журнал.Пожалуйста помоги.Спасибо.Следующие данные очищают данные и добавляют их в список массивов:

do {

        row = (ArrayList<WebElement>) driver.findElements(By.cssSelector(".event-row-container.ng-scope"));

        WebElement element = driver.findElement(By.cssSelector(".paybillnumbers"));
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("li.ng-scope[translate='next']"))).click();
        times++;
        rows.addAll(row);
        }
        while(times <=6);

Вот код, в который журнал ссылается на ошибку:

                ArrayList<WebElement> rowDetails2 = (ArrayList<WebElement>) rowDetails.findElements(By.cssSelector(".event-market.market-3-way.market-selections-3"));

А вот мой журнал:

Запуск ChromeDriver 2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8) через порт 3035 Разрешены только локальные подключения.18 декабря 2018 11:18:53 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаруженный диалект: OSS Запуск ChromeDriver 2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8) для порта 24080 разрешены только локальные подключения.18 декабря 2018 11:18:58 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаружен диалект: OSS 98 Исключение в потоке "main" org.openqa.selenium.StaleElementReferenceException: ссылка на устаревший элемент: элемент не присоединен кдокумент страницы (информация о сеансе: chrome = 71.0.3578.98) (информация о драйвере: chromedriver = 2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8), платформа = Mac OS X 10.13.6 x86_64) (ПРЕДУПРЕЖДЕНИЕ: сервер не предоставил никакой информации о продолжительности стека)или время ожидания: 0 миллисекунд

1 Ответ

0 голосов
/ 18 декабря 2018

Для StaleElementReferenceException нам нужно использовать время ожидания

    new WebDriverWait(driver, 60).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".event-market.market-3-way.market-selections-3")));

здесь 60 - это макс. Секунды, которые вы можете изменить.Кроме того, локатор содержит число 3. Могут быть изменения в изменении локатора при выполнении, поэтому, пожалуйста, посмотрите на него.

Если ожидание не удается, вы также можете использовать Thread.sleep в java.

см. это

...