当前位置: 首页 > 知识库问答 >
问题:

Ashot没有截取正确元素的屏幕截图

山翼
2023-03-14

我试图在一个网页中给出的表格的屏幕截图。和我在代码中提供的相同元素xpath,但是Ashot代码正在捕获其他位置的屏幕截图。

我也尝试过其他截图代码,

Screenshot screenshot = new AShot().takeScreenshot(driver,driver.findElement(By.xpath(webElementXpath)));

但它给了我错误,我可以通过阅读这个链接来修复:https://github.com/pazone/ashot/issues/93,然后我使用下面的代码:

WebElement myWebElement = driver.findElement(By.xpath("//center/table/tbody/*"));
        Screenshot fpScreenshot = new AShot()
                .coordsProvider(new WebDriverCoordsProvider()).takeScreenshot(driver,myWebElement);

         ImageIO.write(fpScreenshot.getImage(),"PNG",new File("/Users/sanatkumar/eclipse-workspace/com.ScreenshotUtility/Screenshots/error.png"));

请帮助,因为此代码正在给我网页某些随机部分的屏幕截图。我也试图捕获其他元素,但我再次没有得到正确的屏幕截图:

请注意,我的表格在网页上不完全可见,手动我必须向下滚动才能查看完整的表格。我需要编写其他代码才能获得表格的完整截图吗??

此外,我的网站是基于角度的,我试图使用硒java自动化。我这样做的原因是因为在量角器中我找不到像Ashot这样的任何API。如果有人知道,请告诉我。

共有2个答案

龙新荣
2023-03-14

使用量角器也可以实现此功能,因为需要NPM模块,如“量角器图像比较”。例如,如果您想捕获侧栏上的相关帖子,可以使用以下代码。

注意:我还没有用超出浏览器视口范围的大型元素测试过这个包,所以不能说它们将如何处理这些元素。

等级库文件

describe('simple test', () => {
    it('will save image', async () => {
        await browser.get("https://stackoverflow.com/questions/54724963/ashot-is-not-taking-screenshot-of-correct-element");
        await browser.driver.sleep(10 * 1000);

        let related_questions_sidebar = element(by.className('module sidebar-related'));
        await browser.executeScript('arguments[0].scrollIntoView();', related_questions_sidebar);
        await browser.driver.sleep(3 * 1000);

        // saveElement
        await browser.protractorImageComparison.saveElement(related_questions_sidebar, 'sidebar-image');
    });
});

Conf.js-在OnPrepare中

onPrepare: async () => {
    // await jasmine.getEnv().addReporter(new dbReporter());
    const protractorImageComparison = require('protractor-image-comparison');
    browser.protractorImageComparison = new protractorImageComparison(
        {
            baselineFolder: './screen-compare/baselines/',
            screenshotPath: './screen-compare/screenshots/'
        }
    ); 
); 

图像保存

皇甫树
2023-03-14

通过添加一个shootingStrategy,我能够捕获页面底部具有属性id=“post form”的表单元素。

从文档中https://github.com/pazone/ashot

不同的网络驱动程序截图的方式不同。一些Web驱动程序提供整个页面的屏幕截图,而另一些只处理视口。

...

射击策略中有针对不同用例的内置策略。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
import javax.imageio.ImageIO;
import java.io.File;

public class Main
{
    public static void main(String args[]) throws Exception
    {
        System.setProperty("webdriver.gecko.driver", "./geckodriver");
        System.setProperty("webdriver.firefox.bin", "/usr/bin/firefox");
        WebDriver driver = new FirefoxDriver();
        driver.get("https://stackoverflow.com/questions/54724963/ashot-is-not-taking-screenshot-of-correct-element");
        Thread.sleep(2000);
        WebElement webElement = driver.findElement(By.id("post-form"));
        Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver,webElement);
        ImageIO.write(screenshot.getImage(),"PNG",new File("/home/dan/ElementScreenshot.png"));
        Thread.sleep(2000);
        driver.quit();
    }
}
 类似资料:
  • 当我使用Ashot和selenium来捕获特定webelement的屏幕截图时,它不起作用。我还附上了日志以供参考。 截图获取整个页面正在运行。 注意:我已经更新了最新的jar的评论中提到 Iam使用Chrome驱动程序、selenium 3.8.1独立jar、Ashot 1.5.2 jar。 } 错误消息:

  • 我目前正在尝试实现Ashot来为我当前的项目截图,它正在为桌面工作。 但我想知道如何在iOS和Android设备上实现它,互联网上没有太多信息。 我使用了以下视口,它正在为iPad截图: 屏幕截图FullPage=new AShot()。拍摄策略(ShootingStrategies.viewportRetina(100,0,0,2))。截图(司机); 但是我想知道如何使用给定的属性来为其他IOS

  • 当我运行上面的代码时,我得到了错误,我的python版本是2.7。硒含量为3.1 代码错误 [0315/220804.111:ERROR:angle_platform_impl.cc(33)]angle Display::initialize err或5:DXGI 1.2需要显示给另一个进程拥有的HWNDs。[0315/220804.111:错误:gl\u surface\u egl.cc(646

  • 问题内容: 我希望用户在Swift中以编程方式按下按钮后继续运行我的应用并为应用截图。我知道需要截图,但是我不需要整个屏幕的图片。我希望弹出一个矩形(有点像裁剪工具),并且用户可以拖动矩形并调整其大小以仅截取屏幕的特定部分的屏幕截图。我希望矩形经过a 并裁剪Web视图的图片。 问题答案: 标准的快照技术是,将其绘制到图像上下文。在iOS 10及更高版本中,您可以使用: 而且您会这样使用: 在iOS

  • 问题内容: 是否可以使用JavaScript截取网页的屏幕截图,然后将其提交回服务器? 我不太担心浏览器的安全性问题。等,因为实施将针对HTA。但是有可能吗? 问题答案: 我已经通过使用ActiveX控件为HTA完成了此操作。在VB6中构建控件以截取屏幕截图非常容易。我必须使用keybd_event API调用,因为SendKeys无法执行PrintScreen。这是该代码: 这只会使您到达将窗口

  • 在Linux下有很多屏幕载图的工具,下面简单介绍一下: 在GNOME桌面中自带了一个屏幕截图工具,位于“动作”栏内。该工具功能很少,只能截取当前屏幕。 在GMIP中也可截图,在“文件”--“获取”菜单下有一个“屏幕抓图”选项可进行屏幕截图。它可截取任意图窗口的内容,并自动输入到GMIP中,我们可方便地进行处理和保存。 安装ImageMagick软件,它有一个工具叫import可用于屏幕截图。该工具