Перейти к содержимому

Автоматизатор мобильных приложений
онлайн, начало 11 августа
Тестирование юзабилити (usability)
онлайн, начало 4 августа
Школа Тест-Аналитика
онлайн, начало 4 августа
Автоматизация тестирования REST API на Python
онлайн, начало 11 августа

Публикации SergeyQA

2 публикаций создано SergeyQA (учитываются публикации только с 03 августа 2020)


#177841 Ошибка при ресайзе страницы после перехода на Chrome 86

Отправлено автор: SergeyQA 28 октября 2020 - 09:50 в Selenium - Functional Testing

на самом деле вопроса 2.

1) почему не получается взять скриншот высоты больше 8100 ( а скорее 8191 или 8192)

2) почему в 86 версии тесты падают.
 и это совершенно разные вопросы.

Вполне возможно что в 85 версии вы просто не берете слишкомбольшой скриншот, потому что тесты не падают, а если уроните специально, то тоже не получите скриншота

Ну а про то почему упали тесты на 86 версии у вас никакой информации нет. ее съело падениесамих тестов на попытке сохранить скриншот.

Спасибо за ответ!
Я думаю, что сами тесты (ваш пункт 2) можно в расчет не брать. Проблема именно в захвате скриншота самим селениумом в хроме.
В 85-ой версии я беру точно-такие же большие скриншоты, но тесты проходят. Я это специально проверял. 
А что вы знаете по поводу высоты окна выше 8100? Почему вы дали более точную цифру? что это за цифра в 8191 или 8192?




#177832 Ошибка при ресайзе страницы после перехода на Chrome 86

Отправлено автор: SergeyQA 27 октября 2020 - 16:35 в Selenium - Functional Testing

Всем доброго дня!

Постараюсь последовательно все пояснить.
Все работало стабильно, но cлучилось нечто после перехода нами с 85 на Chrome 86.
Тесты стали падать при сохранении скриншота.

Строка, в которой возникают проблемы:
status = driver.instance.save_screenshot(str(screenshot_path_with_file.absolute()))
 

    def create_and_save_screenshot_in_local(self, screenshot_local_storage_data: ScreenshotLocalStorageData) -> bool:
        """Make and save screenshot in local dir. Return origin screenshot_path_data if success"""
        dir_path_for_screenshot = screenshot_local_storage_data.local_dir_path
        screenshot_path_with_file: Path = screenshot_local_storage_data.full_local_screenshot_path

        pathlib.Path(dir_path_for_screenshot).mkdir(parents=True, exist_ok=True)

        # Resize to full page for making screenshot
        driver_actions.resize_window_to_full_page()

        logging.info(f"Saving screenshot in path: '{screenshot_path_with_file}'")
        status = driver.instance.save_screenshot(str(screenshot_path_with_file.absolute()))
        if status:
            logging.info(f"Successfully saved screenshot in local storage: '{screenshot_path_with_file=}'")
            return True

        logging.warning(f"Failed on saving screenshot in '{screenshot_path_with_file=}'")
        return False

В конечном итоге ошибка такая:

self = <selenium.webdriver.remote.webdriver.WebDriver (session="a6137efb0d5565ad1ae0e0119985a083")>

    def get_screenshot_as_png(self):
        """
        Gets the screenshot of the current window as a binary data.
    
        :Usage:
            driver.get_screenshot_as_png()
        """
>       return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
E       AttributeError: 'NoneType' object has no attribute 'encode'

До строки, где скришот сохраняется, есть метод, который делает делает ресайз страницы (разворачивает ее полностью).
 

def resize_window_to_full_page():
    """Resize window to full page size"""
    window_width = int(execute_js('return window.innerWidth'))
    page_height = int(execute_js('return document.body.scrollHeight'))
    # Add a few pixels so that the picture is not cropped from the bottom
    set_window_size(window_width, page_height + 250)
    # Some processes can be executing after resize, waiting for then
    waiting_actions.wait_for_ajax()
    waiting_actions.wait_for_load()

Так вот, тесты стали падать на страницах, высота которых достаточно большая. Причем, как видно из трейса, тест падает не на строках метода ресайза, а именно при сохранении скриншота.
Империческим путем я выяснил, что проблема возникает, если высота страницы более 8100 пикселей.
Если я руками устанавливают значение page_height = 8100, то тесты проходят прекрасно.

Если говорить о физическом поведении браузера, то для падающего теста он ведет себя так:  в момент ресайза окно браузера уменьшается, затем через несколько секунд тест падает с вышеупомянутой ошибкой. 
Когда высота страницы менее 8100 пикселей, то окно браузера сжимается, затем сразу раскрывается на заданную высоту и ширину, делается и сохраняется скриншот, тест PASS.

Убедился, что ошибка только на 86 версии. При прогоне на 85 версии все тесты PASS.

Почему возникает эта проблема? Баг драйвера? Как решить эту проблему? 
Нам важно делать скришнот именно полной страницы, а не только видимой обрасти. 

 





Яндекс.Метрика
Реклама на портале