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.
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();
}
}
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.
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()
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
Une solution moins élégante consiste à extraire le journal "manuellement" du répertoire de données utilisateur:
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);
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.
À 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);