Selenium 简明教程

Selenium - LogExpert Logging

Selenium Webdriver 可用于记录测试执行期间的信息。记录主要用于提取有关执行如何发生的信息。

Why use Logging in Selenium?

记录在 Selenium 中编写测试时是一个重要的步骤,原因如下:

  1. 记录有助于更快的调试故障。此外,如果设置了记录级别,则更容易对故障进行分类。

  2. 大多数日志记录框架是免费且开源的,它允许我们在不同级别上设置和抑制日志,并发挥应用程序的最佳性能。

Different Logging Levels

实现日志记录的第一步是针对每个类启用具有默认设置的日志记录。让我们首先启用适用于所有记录器的默认日志记录,它使用根记录器。

Logger logger = Logger.getLogger("");

由于日志记录是针对类进行设置的,因此我们可以设置适合类的记录级别。

((RemoteWebDriver) driver).setLogLevel(Level.INFO);
Logger.getLogger(SeleniumManager.class.getName())
.setLevel(Level.SEVERE);

共有七个记录级别:SEVERE、WARNING、INFO、CONFIG、FINE、FINER 和 FINEST。INFO 记录级别是默认级别,这意味着我们的代码中没有需要处理的动作项,纯粹出于信息目的。

Logger logger = Logger.getLogger("");
logger.setLevel(Level.INFO);

总是需要所有记录级别,因此我们可以使用 setLevel() 方法根据级别来过滤日志。

Logger logger = Logger.getLogger("");
logger.setLevel(Level.WARNING);

在上面的示例中,已设置 WARNING 记录级别,这意味着需要解决一些操作,特别是用于在我们代码中使用已弃用的版本。

Example 1 - Warning Log Levels

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

public class LoggingLvl {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // enabling log levels to Warning
      ((RemoteWebDriver) driver).setLogLevel(Level.WARNING);

      //adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");

      // getting current URL
      System.out.println("Getting the Current URL: " + driver.getCurrentUrl());

      // quitting the browser
      driver.quit();
   }
}

Output

Feb 15, 2024 4:41:42 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executing: setTimeout
 [510e0fcbc35b47f7637445d1b69bedc2, setTimeout {implicit=12000}]
Feb 15, 2024 4:41:42 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executed: setTimeout (Response: SessionID:
 510e0fcbc35b47f7637445d1b69bedc2, Status: 0, Value: null)
Feb 15, 2024 4:41:42 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executing: get [510e0fcbc35b47f7637445d1b69bedc2, get {url=https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php}]
Feb 15, 2024 4:41:43 PM
org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executed: get (Response: SessionID:
 510e0fcbc35b47f7637445d1b69bedc2, Status: 0, Value: null)
Feb 15, 2024 4:41:43 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executing: getCurrentUrl
 [510e0fcbc35b47f7637445d1b69bedc2, getCurrentUrl {}]
Feb 15, 2024 4:41:43 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executed: getCurrentUrl (Response: SessionID:
510e0fcbc35b47f7637445d1b69bedc2, Status: 0, Value: https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php)
Feb 15, 2024 4:41:43 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executing: quit [510e0fcbc35b47f7637445d1b69bedc2, quit {}]
Getting the Current URL: https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php
Feb 15, 2024 4:41:43 PM
 org.openqa.selenium.remote.RemoteWebDriver log
WARNING: Executed: quit (Response: SessionID: 510e0fcbc35b47f7637445d1b69bedc2, Status: 0, Value: null)

Process finished with exit code 0

在上面的示例中,我们获得了 WARNING 记录级别以及带有消息 Getting the Current URL: Selenium Automation Practice Form 的浏览器标题。

Example 2 - Fine Log Levels

记录信息还包含用于调查特定问题并更正问题的调试信息。这可以通过将记录级别设置为 FINE 来实现。

Logger logger = Logger.getLogger("");
logger.setLevel(Level.FINE);

Example 3 - Severe Log Levels

让我们看另一个示例,我们将记录级别设置为 SEVERE。

采用 SEVERE 记录级别的代码实现。

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

public class LoggingLvls {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // enabling log levels to SEVERE
      ((RemoteWebDriver) driver).setLogLevel(Level.SEVERE);

      //adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");

      // Identify the input box with xpath locator
      WebElement e = driver.findElement(By.xpath("//*[@id='name']"));

      // enter text in input box
      e.sendKeys("Selenium");

      // getting current URL
      System.out.println("Getting the Current URL: " + driver.getCurrentUrl());

      //quitting the browser
      driver.quit();
   }
}

Output

在上面的示例中,我们获得了 SEVERE 记录级别以及带有消息 Getting the Current URL: Selenium Automation Practice Form 的浏览器标题。

Obtain Log Levels in Separate Files

可以使用一个处理程序将控制台中生成的对数写入另一个文件中。默认情况下,所有日志都放置在 System.err 中。

Example

package org.example;

import org.openqa.selenium.WebDriver;
import java.io.IOException;
import java.util.logging.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import java.util.logging.Handler;

public class LoggingLvelFile {
   public static void main(String[] args) throws InterruptedException, IOException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // enabling log levels to WARNING
      Logger logger = Logger.getLogger("");
      logger.setLevel(Level.WARNING);

      //  output logging to another file Logs1.xml
      Handler handler = new FileHandler("Logs1.xml");
      logger.addHandler(handler);

      //adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");

      // getting current URL
      System.out.println("Getting the Current URL: " + driver.getCurrentUrl());

      //quitting the browser
      driver.quit();
   }
}

Output

Getting the Current URL:
https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php

Process finished with exit code 0

在上面的示例中,我们在控制台中使用消息检索了浏览器标题 - Getting the Current URL: Selenium Automation Practice Form

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

而且,在项目目录中将创建一个 Logs1.xml 文件,其中包含日志。

Conclusion

总结一下我们对 Selenium WebDriver Logging 和 LogExpert 教程的全面总结。我们首先描述了在 Selenium 中使用日志的原因,并使用一个说明如何将其与 Selenium 结合使用的示例,介绍了不同的日志级别。

这让你对 LogExpert 日志记录有了深入的了解。明智的做法是继续实践你学到的知识,并探索其他与 Selenium 相关的知识,以加深你的理解并拓宽你的视野。