Seleniumを使用して自動化されたテストケースを実行しながら、ブラウザログをキャプチャする方法はありますか? SeleniumでJavaScriptエラーをキャプチャする方法 に関する記事を見つけました。しかし、それはFirefoxのためだけであり、エラーのためだけです。すべてのコンソールログを取得したいと思います。
私はそれが次の行にあると思います:
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();
}
}
ソース: Chromeのコンソールログを取得
より簡潔な方法で、次のことができます。
LogEntries logs = driver.manage().logs().get("browser");
私にとっては、コンソールでJSエラーをキャッチするのに素晴らしい働きをしました。次に、サイズの検証を追加できます。たとえば、> 0の場合、エラー出力を追加します。
非Java Seleniumユーザーとして、Margusの答えに相当するpythonは次のとおりです。
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()
編集:Pythonの回答をJavaの回答と非常によく似ているため、このスレッドに保持し、この投稿は同様のPythonの質問のGoogle検索で返されます
よりエレガントなソリューションは、ユーザーデータディレクトリからログを「手動で」取得することです。
ユーザーデータディレクトリを固定の場所に設定します。
options = new ChromeOptions();
capabilities = DesiredCapabilities.chrome();
options.addArguments("user-data-dir=/your_path/");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
上記で入力したパスにあるログファイルchrome_debug.logからテキストを取得します。
RemoteWebDriver
はコンソールログをリモートで取得する際に問題が発生したため、この方法を使用します。テストをローカルで実行すると、簡単に取得できます。
Firefox 65以降、about:config
フラグが存在するため、console.log()
のようなコンソールAPI呼び出しが出力ストリームに、したがってログファイルに表示されます((- https://github.com/mozilla/ geckodriver/issues/284#issuecomment-458305621 )。
profile = new FirefoxProfile();
profile.setPreference("devtools.console.stdout.content", true);