如何从RemoteWebDriver服务器而不是本地FirefoxDriver获取屏幕截图?

Wah*_*001 9 java selenium webdriver

我正在使用RemoteWebDriver从我的笔记本电脑(Java客户端)在远程PC上运行Selenium WebDriver测试.但是RemoteWebDriver还没有提供截屏API来直接获取远程PC的截图.谷歌搜索了很多,但发现似乎需要使用Json API直接从remoteWebDriver服务器获取它.任何人都可以给我一些关于如何做的指示?谢谢.

Mik*_*wan 13

RemoteWebDriver必须增强之前,你可以使用截图功能.正如您已经发现的那样,尝试在没有增加的情况下进行投射会导致异常.

WebDriver driver = new RemoteWebDriver( ... );
driver           = new Augmenter().augment( driver );
( (TakesScreenshot)driver ).getScreenshotAs( ... );
Run Code Online (Sandbox Code Playgroud)


zer*_*res 5

我能够让这个工作......这是你需要做的:

1)在Util目录或某个地方创建一个新的类文件

package com.util;

import java.net.URL;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.DriverCommand;
import org.openqa.selenium.remote.RemoteWebDriver;

public class ScreenShotRemoteWebDriver extends RemoteWebDriver implements TakesScreenshot {

    public ScreenShotRemoteWebDriver(URL url, DesiredCapabilities dc) {

        super(url, dc);

    }

    @Override
    public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {

        if ((Boolean) getCapabilities().getCapability(CapabilityType.TAKES_SCREENSHOT)) {
            return target.convertFromBase64Png(execute(DriverCommand.SCREENSHOT).getValue().toString());
        }
        return null;

    }

}
Run Code Online (Sandbox Code Playgroud)

2)然后......无论你启动RemoteWeDriver,请用以下代码替换:

driver = new ScreenShotRemoteWebDriver(new URL(-PUT YOUR HUB URL HERE-),cap);
Run Code Online (Sandbox Code Playgroud)

您的屏幕截图将存储在本地.

希望这可以帮助.