我的任务是截取移动版网页的屏幕截图。
为此,我选择了 Selenide 和 Ashot。在桌面视图中一切正确。但是在页面的移动仿真视图中,存在一些问题。它显示了一张照片,但捕获了另一张照片。也许有人知道另一种解决方案,或者如何解决这个问题?
public class ChromeMobileEmulation implements WebDriverProvider {
@Override
public WebDriver createDriver(DesiredCapabilities desiredCapabilities) {
Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "iPhone X");
ChromeOptions chromeOptions = new ChromeOptions().setHeadless(true);
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
chromeOptions.addArguments("--diagnostics", "--disable-blink-features");
WebDriverManager.chromedriver().setup();
return new ChromeDriver(chromeOptions);
}
@BeforeAll
public static void setUp() throws IOException {
propertyLoader();
createFolders();
SelenideLogger.addListener("allure", new AllureSelenide().screenshots(true).savePageSource(false));
Configuration.browser = System.getProperty("browser");
Configuration.timeout = 10000;
RestAssured.filters(new AllureRestAssured());
chromeMobile = new SelenideDriver(new SelenideConfig()
.browser(ChromeMobileEmulation.class.getName())
.headless(true)
.browserSize("375x812"));
}
private Screenshot capturePage(int scrollTime) {
return new AShot().shootingStrategy(viewportPasting(scrollTime)).takeScreenshot(getWebDriver());
}
protected void capturePageToVault(String pageName, String url, SelenideDriver driver, int scrollTime) throws IOException {
driver.open(url);
expected = capturePage(scrollTime, driver.getWebDriver());
ImageIO.write(expected.getImage(), "png", expectedImg(pageName));
}
}
WORKING SOLUTION FOR ME
private Screenshot capturePage(int scrollTime, WebDriver driver) {
return new AShot()
.coordsProvider(new WebDriverCoordsProvider())
.shootingStrategy(viewportPasting(scaling(3), scrollTime))
.takeScreenshot(driver);
}