2017-09-08 7 views
0

私はSelenideとPhantomjsを使ってWebアプリケーションをテストしています。次のようにスクリーンショットを撮る イム:入力要素のためセレン化物とFirefoxは欠陥のあるスクリーンショットを記録します

byte[] bytes = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.BYTES); 
ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
returnImage = ImageIO.read(bis); 

が、しかし、スクリーンショットは、次のようになります。faulty screenshot

それは実際にこのようになります(クロムを使用した場合/ Firefoxの) how it's supposed to look

面白いのは、SelenideをPhantomjs(Configuration.Browser = "phantomjs")を使用するように設定すると、スクリーンショットが正しく取得されるということです。 この種の要素でのみ発生します。ボタンなどがうまく録音されています。何か案は?

PS:この投稿に添付されているスクリーンショットは切り取られています。ここでのコードはページ全体のスクリーンショットです。私のコードでは、スクリーンショットを目的の要素にのみトリミングしますが、スクリーン全体を表示するスクリーンショットでも、要素は正しく記録されません。

答えて

0

あなたはコードの下に使用して要素をスクリーンショット取ることができます: -

WebElement ele = driver.findElement(By.id("hplogo")); 

// Get entire page screenshot 
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
BufferedImage fullImg = ImageIO.read(screenshot); 

// Get the location of element on the page 
Point point = ele.getLocation(); 

// Get width and height of the element 
int eleWidth = ele.getSize().getWidth(); 
int eleHeight = ele.getSize().getHeight(); 

// Crop the entire page screenshot to get only element screenshot 
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), 
    eleWidth, eleHeight); 
ImageIO.write(eleScreenshot, "png", screenshot); 

// Copy the element screenshot to disk 
File screenshotLocation = new File("C:\\images\\GoogleLogo_screenshot.png"); 
FileUtils.copyFile(screenshot, screenshotLocation); 

さて、上記のコードでは、あなたが取得のgetWidth()とのgetHeightれ

()。値を加算または減算して調整することができます。

希望すると助かります:)

+0

これは私の質問に対する答えではないのですか?私はスクリーンショットを撮ることに問題はありません。その要素は正しく表示されません。 – user3479176

+0

ああ、あなたのドライバーは呼び出されたときに自らが適切な要素を示していないのですか? –

+1

スクリーンショットは要素を正しく示していません。それは今働くいくつかのreasingのために、私は理由を知りません。とにかく、ありがとう ! – user3479176

関連する問題