Selenium2: создание скриншотов с помощью Selenium Grid 2

Можно ли делать скриншоты с помощью Selenium Grid 2? Класс RemoteWebDriver не реализует интерфейс TakesScreenshot.

Отметка


person Mark Micallef    schedule 16.08.2011    source источник


Ответы (2)


RemoteWebDriver должен быть расширен, прежде чем вы сможете использовать возможность скриншота. Как вы, без сомнения, уже обнаружили, попытка приведения без увеличения приводит к исключению.

WebDriver driver = new RemoteWebDriver( ... );
driver           = new Augmenter().augment( driver );
( (TakesScreenshot)driver ).getScreenshotAs( ... );
person Mike Kwan    schedule 16.08.2011
comment
Спасибо, Майк... Код нужно было немного исправить, но он отлично работает :) - person Mark Micallef; 17.08.2011
comment
На всякий случай, если кто-то ищет это driver = new Augmenter().augment(driver); - person Theo; 25.01.2017

Вам нужно будет написать класс-оболочку, который расширяет RemoteWebDriver и реализует интерфейс TakeScreenshot, как показано ниже, в java.

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; 
    } 
}
person nilesh    schedule 16.08.2011
comment
Спасибо, нилеш. Я думаю, что другой подход (Augmenter) чище. :) - person Mark Micallef; 17.08.2011
comment
Истинный. У меня это было до того, как Augmenter стал частью API. - person nilesh; 17.08.2011