4

我正在尝试使用初始设置从 Chrome 中提取控制台日志,该设置需要为 chrome webdriver 设置参数(来自Capturing browser logs with Selenium):

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);

如何让 Serenity BDD 使用来自 (net.thucydides.core.annotations.Managed) 的 @Managed 管理我的 WebDriver 时让它工作?

我正在使用(JUnit + Selenium + Serenity BDD),我当前的布局测试例如如下:

@RunWith(SerenityRunner.class) 
public class UserLoginSuccessfulIT {

@Managed(driver="chrome")                              
WebDriver driver;

@Steps                                                                       
LoginSuccessfulSteps user;

  @Test
  public void user_logs_in_successfully() throws IOException{
     //GIVEN
     user.opens_loginpage();
     //WHEN
     user.userTypesUserPass("user", "pass");
     user.logs_in();
     //THEN
     user.sees_welcomepage();
     user.check_for_dead_links_from_file();

  }

}
4

2 回答 2

0

我今天正是需要这个。这是我的做法。

在我的serenity.properties我补充说:

chrome.capabilities.loggingPrefs = { browser : all }

根据来自这里这里这里的信息。

然后我创建了一个 Serenity Task

public class DumpLogs implements Task {

    private static final Logger log = LoggerFactory.getLogger(DumpLogs.class);

    public DumpLogs() {}

    public static DumpLogs all() {

        return Tasks.instrumented(DumpLogs.class);
    }

    @Override
    @Step("dump all browser logs")
    public <T extends Actor> void performAs(T actor) {

        WebDriver driver = BrowseTheWeb.as(actor).getDriver();
        LogEntries entries = driver.manage().logs().get(LogType.BROWSER);
        for (LogEntry entry : entries) {
            if (entry.getLevel().equals(Level.SEVERE))
                log.error(entry.getMessage());
            else if (entry.getLevel().equals(Level.WARNING))
                log.warn(entry.getMessage());
            else if (entry.getLevel().equals(Level.INFO))
                log.info(entry.getMessage());
            else
                log.debug(entry.getMessage());
        }
    }
}

我从我的@After方法中调用它,以便在每个测试的最后(通过或失败)记录内容。

我的其余测试代码与您的示例几乎相同。

于 2021-02-12T22:21:20.390 回答
0

您可以在宁静中拥有自己的跑步者,并使用您想要的功能实例化驱动程序。通过这样做,您可以配置和重定向日志。

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(
        plugin = {"pretty"},
        features = "<feature file path>",
        glue = {"<steps path as comma separated values"}
)
public class MyRunner {

       }
于 2019-06-06T04:17:49.353 回答