J'ai écrit un peu parce que j'en avais besoin.
Je suppose ce genre de configuration.
.
├── data
│   └── urls.csv
├── utilities
│   └── read_csv.py
└── test_screenshot.py
C'est un processus pour ouvrir l'URL écrite dans la colonne url de csv et prendre une capture d'écran, et l'ouvrir pour prendre une capture d'écran.
La largeur est fixée à 1920px, mais il est possible de prendre en charge le défilement ainsi que la hauteur.
 test_screenshot.py
import time
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from utilities.read_csv import read_csv_data
class TestScreenshot():
    datalist = read_csv_data("./data/urls.csv")
    @classmethod
    def setup_class(cls):
        options = Options()
        options.add_argument('--headless')
        options.add_argument('--hide-scrollbars')
        cls.driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)
        cls.driver.maximize_window()
    @pytest.mark.parametrize("id, url", datalist)
    def test_reserve_multi(self, id, url):
        driver = self.driver
        driver.get(url)
        time.sleep(3)
        page_height = driver.execute_script('return document.body.scrollHeight')
        driver.set_window_size(1920, page_height)
        driver.save_screenshot(id + '.png')
CSV
Il a deux colonnes, la colonne ʻid et la colonne ʻurl. ʻId` est également utilisé dans le nom du fichier de capture d'écran.
 urls.csv
id,url
1,https://www.hoge.co.jp/
2,https://www.hoge.co.jp/pageA/
3,https://www.hoge.co.jp/pageB/
4,https://www.hoge.co.jp/pageC/
5,https://www.hoge.co.jp/pageD/
 read_csv.py
import csv
def read_csv_data(csv_path):
    rows = []
    with open(str(csv_path), encoding="utf-8") as csv_data:
        content = csv.reader(csv_data)
        next(content, None)
        for row in content:
            rows.append(row)
        print(rows)
        return rows
> pytest test_screenshot.py
J'ai en fait essayé de l'utiliser, mais je ne pouvais pas l'obtenir en plein écran sur un site qui bougeait en utilisant pleinement JS.
Probablement pas limité à cette méthode, je pense que c'est assez strict.
Recommended Posts