C# 如何在Selenium中将图像复制到剪贴板?
我正在编写一个测试,我需要复制的功能本质上是将一个图像保存到剪贴板,并在以后粘贴它。我正在使用SeleniumWebDriver v3.11.1 我曾尝试使用ContextClick以多种方式复制图像,但从未完全达到我的目的,例如: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
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(屏幕截图,文件)代码>