如何在Selenium中将图像复制到剪贴板?

3

我正在编写一份测试,所需功能是将图片保存到剪贴板并稍后粘贴。我正在使用Selenium WebDriver v3.11.1。

我尝试使用ContextClick以多种方式复制图像,但始终不能完全满足我的要求,例如:

Actions rightClickAction = new Actions(driver);
rightClickAction.MoveToElement(logo).ContextClick(logo).SendKeys(Keys.ArrowDown).SendKeys(Keys.ArrowDown).SendKeys(Keys.ArrowDown).SendKeys(Keys.Enter).Build().Perform();

但是,向下箭头/回车键没有起作用,因为它没有聚焦在右键菜单上。然后我发现了这个 bug https://bugs.chromium.org/p/chromedriver/issues/detail?id=1003 ,这让我想到不能使用上下文单击复制图像。我也不能直接使用'ctrl+c'复制图像。

然后我学会了如何使用剪贴板,但我无法从我的目录中设置一个图像:

Clipboard.SetImage(Image.FromFile("C://Image.png"));

我尝试了以下方法来截图:参考C# Selenium - How do you take a screenshot in Visual Studio 2015,但是这种方法也没用。试着保存截图并将其添加到“剪贴板”很麻烦。
我还尝试了通过使用由webdriver执行的JavaScript来获取页面上的图像的base64字符串,然后将图像的base64字符串保存到文件中,具体方法在这里:Using selenium to save images from page
这个方法也很麻烦,而且我不确定如何将它保存到剪贴板中。
那么,我应该如何保存图像到剪贴板呢?

1
也许可以先回顾一下整个情境是什么。你为什么要尝试粘贴一张图片? - JeffC
1
那个图片有href属性吗?如果有的话,你可以使用它。 - Bhargav Marpu
@BhargavMarpu 没有href属性,但是有src属性。 - Ally Wallace
@JeffC 我正在编写一个测试,我需要复制的功能是通过任何可能的方式(截图、复制等)将图像保存到剪贴板中,然后稍后再粘贴它。我已经弄清了粘贴部分。 - Ally Wallace
1个回答

0
你可以尝试类似这样的代码:
    driver.get("https://stackoverflow.com/");
    WebElement element = driver.findElement(By.xpath("//span[(text()='Stack Overflow') and @class='-img _glyph']"));
    WrapsDriver wrapsDriver = (WrapsDriver) element;
    File screenshot = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE);
    Rectangle rectangle = new Rectangle(element.getSize().width, element.getSize().height, element.getSize().height, element.getSize().width);
    Point location = element.getLocation();
    BufferedImage bufferedImage = ImageIO.read(screenshot);
    BufferedImage destImage = bufferedImage.getSubimage(location.x, location.y, rectangle.width, rectangle.height);
    ImageIO.write(destImage, "png", screenshot);
    File file = new File("C:\\tmp\\123.png");
    FileUtils.copyFile(screenshot, file);

请告诉我是否适用于您


我在将这些行转换为C#时遇到了麻烦。BufferedImage bufferedImage = ImageIO.read(screenshot); BufferedImage destImage = bufferedImage.getSubimage(location.x, location.y, rectangle.width, rectangle.height); ImageIO.write(destImage, "png", screenshot); File file = new File("C:\\tmp\\123.png"); FileUtils.copyFile(screenshot, file); - Ally Wallace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接