下面列出了怎么用org.openqa.selenium.logging.Logs的API类实例代码及写法,或者点击链接到github查看源代码。
@TestFactory
Stream<DynamicTest> testCleanBeforeNavigate()
{
WebDriver driver = mock(WebDriver.class, withSettings().extraInterfaces(HasCapabilities.class));
Consumer<Runnable> test = methodUnderTest ->
{
Options options = mock(Options.class);
when(driver.manage()).thenReturn(options);
Logs logs = mock(Logs.class);
when(options.logs()).thenReturn(logs);
when(logs.get(LogType.BROWSER)).thenReturn(mock(LogEntries.class));
methodUnderTest.run();
};
return Stream.of(
dynamicTest("beforeNavigateBack", () -> test.accept(() -> listener.beforeNavigateBack(driver))),
dynamicTest("beforeNavigateForward", () -> test.accept(() -> listener.beforeNavigateForward(driver))),
dynamicTest("beforeNavigateRefresh", () -> test.accept(() -> listener.beforeNavigateRefresh(driver))),
dynamicTest("beforeNavigateTo", () -> test.accept(() -> listener.beforeNavigateTo("url", driver))));
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void assertOnly() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " number = 1;\n"
+ " console.assert(number % 2 === 0);\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
assertEquals(1, logEntryList.size());
final LogEntry logEntry = logEntryList.get(0);
assertTrue(logEntry.getMessage(), logEntry.getMessage().contains("Assertion failed"));
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void assertString() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " number = 1;\n"
+ " console.assert(number % 2 === 0, 'the # is not even');\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
assertEquals(1, logEntryList.size());
final LogEntry logEntry = logEntryList.get(0);
assertTrue(logEntry.getMessage(), logEntry.getMessage().contains("Assertion failed: the # is not even"));
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void assertObject() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " number = 1;\n"
+ " console.assert(number % 2 === 0, {number: number, errorMsg: 'the # is not even'});\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
assertEquals(1, logEntryList.size());
final LogEntry logEntry = logEntryList.get(0);
assertTrue(logEntry.getMessage(), logEntry.getMessage()
.contains("Assertion failed: ({number: 1.0, errorMsg: \"the # is not even\"})"));
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void assertObjects() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " number = 1;\n"
+ " console.assert(number % 2 === 0, {number: number}, {errorMsg: 'the # is not even'});\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
assertEquals(1, logEntryList.size());
final LogEntry logEntry = logEntryList.get(0);
assertTrue(logEntry.getMessage(), logEntry.getMessage()
.contains("Assertion failed: ({number: 1.0}) ({errorMsg: \"the # is not even\"})"));
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void assertParams() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " console.assert(false, 'the word is %s', 'foo');\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
assertEquals(1, logEntryList.size());
final LogEntry logEntry = logEntryList.get(0);
assertTrue(logEntry.getMessage(), logEntry.getMessage()
.contains("Assertion failed: the word is foo"));
}
private static LogEntries mockLogRetrieval(WebDriver webDriver)
{
Options options = mock(Options.class);
when(webDriver.manage()).thenReturn(options);
Logs logs = mock(Logs.class);
when(options.logs()).thenReturn(logs);
when(options.logs()).thenReturn(logs);
LogEntry severeEntry = new LogEntry(Level.SEVERE, 1L, ERROR_MESSAGE);
LogEntry infoEntry = new LogEntry(Level.INFO, 1L, ERROR_MESSAGE);
LogEntries logEntries = new LogEntries(Arrays.asList(severeEntry, infoEntry));
when(logs.get(LogType.BROWSER)).thenReturn(logEntries);
return logEntries;
}
private LogEntry mockGetLogEntry(String logErrorMessage)
{
WebDriver webDriver = mock(WebDriver.class, withSettings().extraInterfaces(HasCapabilities.class));
when(webDriverProvider.get()).thenReturn(webDriver);
when(webDriver.getCurrentUrl()).thenReturn(URL);
Options options = mock(Options.class);
when(webDriver.manage()).thenReturn(options);
Logs logs = mock(Logs.class);
when(options.logs()).thenReturn(logs);
LogEntry severeEntry = new LogEntry(Level.SEVERE, 1L, logErrorMessage);
LogEntry infoEntry = new LogEntry(Level.INFO, 1L, logErrorMessage);
LogEntries logEntries = new LogEntries(Arrays.asList(severeEntry, infoEntry));
when(logs.get(LogType.BROWSER)).thenReturn(logEntries);
return severeEntry;
}
/**
* @throws Exception if the test fails
*/
@Test
@BuggyWebDriver
public void simpleString() throws Exception {
final String html
= "<html>\n"
+ "<body>\n"
+ "<script>\n"
+ " for (i = 0; i < 4; i++) {\n"
+ " console.log('test log ' + i);\n"
+ " }\n"
+ "</script>\n"
+ "</body></html>";
final WebDriver driver = loadPage2(html);
final Logs logs = driver.manage().logs();
final LogEntries logEntries = logs.get(LogType.BROWSER);
final List<LogEntry> logEntryList = logEntries.getAll();
final int count = logEntryList.size();
assertTrue(count > 0);
long timestamp = 0;
for (int i = 0; i < 4; i++) {
final LogEntry logEntry = logEntryList.get(i);
assertTrue(logEntry.getMessage(), logEntry.getMessage().contains("test log " + i));
assertTrue(logEntry.getTimestamp() >= timestamp);
timestamp = logEntry.getTimestamp();
}
}
public SeleniumException(WebDriver d, Throwable cause, SeleniumTest test) {
super(cause);
Map<String, SerializableLogEntries> lg = new HashMap<String, SerializableLogEntries>();
Logs logs = d.manage().logs();
for (String s : d.manage().logs().getAvailableLogTypes()) {
LogEntries logEntries = logs.get(s);
if(!logEntries.getAll().isEmpty()) {
lg.put(s, new SerializableLogEntries(logEntries.getAll()));
}
}
List<LogEntry> entries = new ArrayList<LogEntry>();
entries.add(new LogEntry(Level.ALL, new Date().getTime(), cause.getMessage()));
entries.add(new LogEntry(Level.ALL, new Date().getTime(), ExceptionUtils.getStackTrace(cause)));
lg.put("gatf", new SerializableLogEntries(entries));
}
@Override
public List<String> getSeleniumLog(Session session) {
List<String> result = new ArrayList<>();
Logs logs = session.getDriver().manage().logs();
for (String logType : logs.getAvailableLogTypes()) {
LogEntries logEntries = logs.get(logType);
result.add("********************" + logType + "********************\n");
for (LogEntry logEntry : logEntries) {
result.add(new Date(logEntry.getTimestamp()) + " : " + logEntry.getLevel() + " : " + logEntry.getMessage() + "\n");
}
}
return result;
}
public void clearlogs(String logType) {
Logs logs = manage().logs();
logs.get(logType);
}
@AllureFeatures.Attachments
@Test
void shouldSaveLogs() {
final LogEntry logEntry = new LogEntry(Level.ALL, 10, "SIMPLE LOG");
final LogEntries logEntries = new LogEntries(Collections.singletonList(logEntry));
final ChromeDriver wdMock = mock(ChromeDriver.class);
final Logs logsMock = mock(Logs.class);
final Options optionsMock = mock(Options.class);
WebDriverRunner.setWebDriver(wdMock);
doReturn(optionsMock).when(wdMock).manage();
doReturn(logsMock).when(optionsMock).logs();
doReturn(logEntries).when(logsMock).get(LogType.BROWSER.toString());
final AllureResults results = runWithinTestContext(() -> {
final AllureSelenide selenide = new AllureSelenide()
.enableLogs(LogType.BROWSER, Level.ALL)
.savePageSource(false)
.screenshots(false);
SelenideLogger.addListener(UUID.randomUUID().toString(), selenide);
final SelenideLog log = SelenideLogger.beginStep(
"dummy source",
"dummyMethod()",
"param1",
"param2");
SelenideLogger.commitStep(log, new Exception("something went wrong"));
});
final StepResult selenideStep = extractStepFromResults(results);
final Attachment attachment = selenideStep.getAttachments().iterator().next();
final String attachmentContent = new String(
results.getAttachments().get(attachment.getSource()),
StandardCharsets.UTF_8
);
assertThat(selenideStep.getAttachments()).hasSize(1);
assertThat(results.getAttachments()).containsKey(attachment.getSource());
assertThat(attachmentContent).isEqualTo(logEntry.toString());
}
@Override
public Logs logs()
{
return options.logs();
}
@Override public Logs logs() {
return null;
}
@Override
public Logs logs() {
return options.logs();
}
@Override
@Beta
public Logs logs() {
return remoteLogs;
}
public Logs logs() {
throw new UnsupportedOperationException("logs");
}
/**
* Gets the {@link Logs} interface used to fetch different types of logs.
*
* <p>To set the logging preferences {@link LoggingPreferences}.
*
* @return A Logs interface.
*/
@Beta
Logs logs();
/**
* Gets the {@link Logs} interface used to fetch different types of logs.
* <p>
* To set the logging preferences {@link LoggingPreferences}.
*
* @return A Logs interface.
*/
@Beta
Logs logs();