Selenium 简明教程
Selenium - LogExpert Logging
Selenium Webdriver 可用于记录测试执行期间的信息。记录主要用于提取有关执行如何发生的信息。
Why use Logging in Selenium?
记录在 Selenium 中编写测试时是一个重要的步骤,原因如下:
-
记录有助于更快的调试故障。此外,如果设置了记录级别,则更容易对故障进行分类。
-
大多数日志记录框架是免费且开源的,它允许我们在不同级别上设置和抑制日志,并发挥应用程序的最佳性能。
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 文件,其中包含日志。