web-dev-qa-db-fra.com

Capture des journaux de navigateur avec Selenium WebDriver en utilisant Java

Existe-t-il un moyen de capturer les journaux du navigateur lors de l'exécution de scénarios de test automatisés avec Selenium? J'ai trouvé un article sur comment capturer les erreurs JavaScript dans Selenium . Mais ce n'est que pour Firefox et seulement pour les erreurs. Je voudrais obtenir tous les journaux de la console.

58
user3246489

Je suppose que c'est quelque chose dans les lignes de:

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.logging.LogEntries;
import org.openqa.Selenium.logging.LogEntry;
import org.openqa.Selenium.logging.LogType;
import org.openqa.Selenium.logging.LoggingPreferences;
import org.openqa.Selenium.remote.CapabilityType;
import org.openqa.Selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class ChromeConsoleLogging {
    private WebDriver driver;


    @BeforeMethod
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "c:\\path\\to\\chromedriver.exe");        
        DesiredCapabilities caps = DesiredCapabilities.chrome();
        LoggingPreferences logPrefs = new LoggingPreferences();
        logPrefs.enable(LogType.BROWSER, Level.ALL);
        caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
        driver = new ChromeDriver(caps);
    }

    @AfterMethod
    public void tearDown() {
        driver.quit();
    }

    public void analyzeLog() {
        LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
        for (LogEntry entry : logEntries) {
            System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
            //do something useful with the data
        }
    }

    @Test
    public void testMethod() {
        driver.get("http://mypage.com");
        //do something on page
        analyzeLog();
    }
}

Source: Obtenir le journal de la console de chrome

53
Margus

De manière plus concise, vous pouvez faire:

LogEntries logs = driver.manage().logs().get("browser");

Pour moi, cela a fonctionné à merveille pour détecter les erreurs JS dans la console. Ensuite, vous pouvez ajouter une vérification de sa taille. Par exemple, s'il est> 0, ajoutez une sortie d'erreur.

41
Johnny

En tant qu'utilisateur non-Java Selenium, voici l'équivalent de python de la réponse de Margus:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities    

class ChromeConsoleLogging(object):

    def __init__(self, ):
        self.driver = None

    def setUp(self, ):
        desired = DesiredCapabilities.CHROME
        desired ['loggingPrefs'] = { 'browser':'ALL' }
        self.driver = webdriver.Chrome(desired_capabilities=desired)

    def analyzeLog(self, )
        data = self.driver.get_log('browser')
        print(data)

    def testMethod(self, ):
        self.setUp()
        self.driver.get("http://mypage.com")
        self.analyzeLog()

référence

Edit: Conserver Python répondre dans ce fil car il est très similaire à la réponse Java et cette publication est renvoyée sur une recherche Google pour le même Python question

18
Anna

Une solution moins élégante consiste à extraire le journal "manuellement" du répertoire de données utilisateur:

  1. Définissez le répertoire de données utilisateur sur un emplacement fixe:

    options = new ChromeOptions();
    capabilities = DesiredCapabilities.chrome();
    options.addArguments("user-data-dir=/your_path/");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    
  2. Obtenez le texte du fichier journal chrome_debug.log situé dans le chemin que vous avez entré ci-dessus.

J'utilise cette méthode car RemoteWebDriver avait des problèmes pour obtenir les journaux de la console à distance. Si vous exécutez votre test localement, cela peut être facile à récupérer.

4
didinino

À partir de Firefox 65, un indicateur about:config Existe maintenant. Par conséquent, les appels d'API de la console tels que console.log() sont renvoyés dans le flux de sortie et donc dans le fichier journal (voir ( https://github.com/mozilla/geckodriver/issues/284 # issueecomment-458305621 ).

profile = new FirefoxProfile();
profile.setPreference("devtools.console.stdout.content", true);
1
phk