gpt4 book ai didi

java - Selenium WebDriver 在调用 getScreenshotAs() 时抛出 TimoutException

转载 作者:行者123 更新时间:2023-12-02 02:15:48 24 4
gpt4 key购买 nike

这是我的代码。

public static void test1() throws IOException {
System.setProperty("webdriver.chrome.driver", "data/chromedriver.exe");
drive = new ChromeDriver();
drive.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
try {
drive.get("http://youtube.com");
}catch(TimeoutException e) {
printSS();
}

}

public static void printSS() throws IOException{
String path = "logs/ss/";
File scrFile = ((TakesScreenshot)drive).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(path + "asdasdas" + ".jpg"));
}

每次 driver.get() 抛出 TimeoutException 时,我都想在浏览器中截取屏幕截图。

但是当抛出 TimeoutException 时,printSS() 中的 getScreenshotAs() 不会截屏,因为抛出另一个 TimeoutException。

为什么 getScreenshotAs() 会抛出 TimeoutException 以及如何在浏览器中截取屏幕截图

P.S.:增加pageLoadTimeout时间不是我想要的答案。

最佳答案

使用Selenium 3.xChromeDriver 2.36Chrome 65.x时,您需要提及位置的相对路径( 关于您的项目)您打算存储屏幕截图的位置。

我拿了你的代码并做了一些小的修改,如下:

  • 驱动程序声明为WebDriver实例作为静态并添加@Test注释。
  • pageLoadTimeout 减少到 2 秒,以有目的地引发 TimeoutException
  • 字符串路径位置更改为项目范围内的子目录,如下所示:

    String path = "./ScreenShots/";
  • 添加日志为:

    System.out.println("Screenshot Taken");
  • 这是代码块:

     package captureScreenShot;

    import java.io.File;
    import java.io.IOException;
    import java.util.concurrent.TimeUnit;

    import org.apache.commons.io.FileUtils;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.TimeoutException;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.annotations.Test;

    public class q49319748_captureScreenshot
    {

    public static WebDriver drive;

    @Test
    public static void test1() throws IOException {
    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    drive = new ChromeDriver();
    drive.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
    try {
    drive.get("http://youtube.com");
    }catch(TimeoutException e) {
    printSS();
    }

    }

    public static void printSS() throws IOException{
    String path = "./ScreenShots/";
    File scrFile = ((TakesScreenshot)drive).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(scrFile, new File(path + "asdasdas" + ".jpg"));
    System.out.println("Screenshot Taken");
    }
    }
  • 控制台输出:

     [TestNG] Running:
    C:\Users\username\AppData\Local\Temp\testng-eclipse--153679036\testng-customsuite.xml

    Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) on port 42798
    Only local connections are allowed.
    Mar 16, 2018 5:37:59 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: OSS
    Screenshot Taken
    PASSED: test1
  • 屏幕截图:

asdasdas

<小时/>

引用

您可以在 How to take screenshot with Selenium WebDriver 中找到详细讨论

关于java - Selenium WebDriver 在调用 getScreenshotAs() 时抛出 TimoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com