c# - 如何将图像复制到 Selenium 中的剪贴板?
问题描述
我正在编写一个测试,我需要复制的功能本质上是将图像保存到剪贴板并稍后粘贴。我正在使用 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
这也变得一团糟,我不知道如何将其保存到剪贴板。
那么,如何将图像保存到剪贴板?
解决方案
您可以尝试类似的方法:
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);
请让我知道这对你有没有用
推荐阅读
- android-studio - 如何使文件扩展名列表在 JetBrains IDE 中只读?
- react-native - Facebook 登录错误:尝试长时间登录 Facebook 时发生错误
- react-native - React Native Hooks 在 2 个不同的文件中同步 UseState
- c# - 从客户端应用程序动态调用 Web 服务方法
- bash - 如何在 GNU bash 中使用函数进行算术运算?
- r - 如果第二个字段中的值大于或等于数字(在 R 中),则修改字段中的字符串
- agora.io - 如何使用 Agora Video SDK for Unity 发送纹理
- c++ - C++ 概念能否用于在 C++ 中实现混合类型 min 和 max?
- python - 将列表值与字典的键值进行比较
- loops - PSQL for 循环、连接和分组依据