#selenium #selenium-webdriver #webdriver
#селен #selenium-webdriver #webdriver
Вопрос:
Привет всем,
Я написал приведенный ниже код для захвата снимка экрана всей веб-страницы.
Но я могу захватить только частичную / видимую часть отображаемой веб-страницы, а не всю веб-страницу. Пожалуйста, предложите.
Я использую:
Версия Selenium WebDriver: 3.0.0-beta3
Версия Firefox: 49.0.1
ОС: Win10
package Selenium_WebDriver_Part1;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Quikr {
public static WebDriver driver=null;
@Test
public void loginTest() throws InterruptedException, IOException{
System.setProperty("webdriver.gecko.driver","C:\Eclipse\Drivers\geckodriver.exe");
driver = new FirefoxDriver();
driver.get("http://www.quikr.com/");
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
takeScreenShot("LoginPage");
}
public static void takeScreenShot(String fileName) throws IOException{
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh mm ss");
String time = dateFormat.format(now);
String resDir = System.getProperty("user.dir") "\" time;
File resFolder = new File(resDir);
resFolder.mkdir();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File(resDir "\" fileName ".jpeg"));
}
}
Ответ №1:
Я использую selenium 3.0.0 beta4 Firefox v.43.0.1 OS Windows7 вместо System.setProperty («webdriver.gecko.driver», «C:EclipseDriversgeckodriver.exe «); используйте следующую строку System.setProperty(«webdriver.firefox.marionette»,»D:TestingWebDrivergeckodriver.exe «);
Ответ №2:
Мой лучший совет — использовать стороннюю библиотеку обработки изображений Ashot, и она почти решает большинство таких проблем, а также обеспечивает сравнение изображений и т.д. После того, как вы импортировали AShot, используйте приведенный ниже код, чтобы получить полный скриншот веб-страницы.
public byte[] takeScreenshot(){
byte[] img = null;
Screenshot screenshot= new AShot()
.shootingStrategy(ShootingStrategies.viewportPasting(100))
.takeScreenshot(driver);
BufferedImage image = screenshot.getImage();
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
img = imageInByte;
InputStream in = new ByteArrayInputStream(imageInByte);
BufferedImage bImageFromConvert = ImageIO.read(in);
URL location = CodeLocations.codeLocationFromClass(this.getClass());
String path = location.toString().substring(location.toString().indexOf("file:/") 5,location.toString().length());
ImageIO.write(bImageFromConvert, "jpg", new File(
path "/screenshot.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return img;
}
Попробуйте AShot и поделитесь своими мыслями
Ответ №3:
Вот как это должно работать.Если вы хотите захватить всю веб-страницу целиком, вам придется уменьшить масштаб всего содержимого до видимой области, а затем сделать снимок экрана.
Ответ №4:
Для того, чтобы сделать снимок экрана всей страницы, вам необходимо включить дополнительную строку кода перед ((TakesScreenshot)driver).getScreenshotAs … инструкция.
driver = new Augmenter().augment(driver);