【问题标题】:How do I copy an image to the clipboard in Selenium?如何将图像复制到 Selenium 中的剪贴板?
【发布时间】:2018-07-31 03:15:34
【问题描述】:

我正在编写一个测试,我需要复制的功能本质上是将图像保存到剪贴板并稍后粘贴。我正在使用 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();

但是向下/输入箭头从未起作用,因为它没有专注于右键菜单。然后我发现了这个错误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

这也变得一团糟,我不知道如何将其保存到剪贴板。

那么,如何将图像保存到剪贴板?

【问题讨论】:

  • 也许备份并解释整体情况。你为什么要粘贴图片?
  • 该图像是否有 href 属性?如果是这样,您可以使用它
  • @BhargavMarpu 没有 href 属性,但是有 src 属性。
  • @JeffC 我正在编写一个测试,我需要复制的功能是以任何可能的方式(屏幕截图、复制...)将图像保存到剪贴板,然后稍后将其粘贴。我已经弄清楚了粘贴部分。

标签: c# selenium-webdriver


【解决方案1】:

你可以试试类似这样的:

    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);
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2021-07-27
  • 2020-09-16
  • 2013-07-14
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多