Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Selenium中将图像复制到剪贴板?_C#_Selenium Webdriver - Fatal编程技术网

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

C# 如何在Selenium中将图像复制到剪贴板?,c#,selenium-webdriver,C#,Selenium Webdriver,我正在编写一个测试,我需要复制的功能本质上是将一个图像保存到剪贴板,并在以后粘贴它。我正在使用SeleniumWebDriver v3.11.1 我曾尝试使用ContextClick以多种方式复制图像,但从未完全达到我的目的,例如: Actions rightClickAction = new Actions(driver); rightClickAction.MoveToElement(logo).ContextClick(logo).SendKeys(Keys.ArrowDown).Send

我正在编写一个测试,我需要复制的功能本质上是将一个图像保存到剪贴板,并在以后粘贴它。我正在使用SeleniumWebDriver 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,它让我觉得我不能使用上下文单击来复制图像。我也不能只是“ctrl+c”这个图像

然后我了解到,我可以从我的目录中设置无法设置图像的剪贴板:

Clipboard.SetImage(Image.FromFile("C://Image.png"));
然后我试着像这里一样截图:这两种方法都不起作用。试图保存屏幕截图文件并将其添加到“剪贴板”时出错

我还尝试从页面抓取图像,方法是使用webdriver执行的JavaScript获取图像的base64字符串,然后将图像的base64字符串保存到一个文件中,我在这里找到:

这也变得很混乱,我不知道如何将它保存到剪贴板


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

您可以尝试类似的方法:

    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);

让我知道它是否适用于您

也许可以备份并解释总体情况。为什么要粘贴图像?该图像是否有href属性?如果是这样,你可以使用that@BhargavMarpu没有href属性,但有src属性。@JeffC我正在编写一个测试,需要复制的功能是通过任何可能的方式(截图、复制…)将图像保存到剪贴板,然后稍后粘贴。我已经找到了粘贴部分。我在将这些行转换为C#时遇到了问题<代码>BuffereImage BuffereImage=ImageIO.read(屏幕截图);BuffereImage DesImage=BuffereImage.getSubimage(location.x,location.y,rectangle.width,rectangle.height);ImageIO.write(目标图像,“png”,屏幕截图);File File=新文件(“C:\\tmp\\123.png”);copyFile(屏幕截图,文件)