如何使用Java中的Selenium获取画布元素中图像的URL,以及如何使用JavascriptExecutor?

如何使用Java中的Selenium获取画布元素中图像的URL,以及如何使用JavascriptExecutor?,javascript,java,html,selenium,canvas,Javascript,Java,Html,Selenium,Canvas,我的具体目标是从画布容器中获取图像URL,下面是我们所做的: JavascriptExecutor jse = (JavascriptExecutor) driver; Object imageURL = jse.executeScript("arguments[0].toDataURL('image/png');",canvas); 我得到的返回值为null 然后我尝试做一些更基本的事情,比如获取画布的宽度属性 JavascriptExecutor jse = (JavascriptExe

我的具体目标是从画布容器中获取图像URL,下面是我们所做的:

JavascriptExecutor jse = (JavascriptExecutor) driver;

Object imageURL = jse.executeScript("arguments[0].toDataURL('image/png');",canvas);
我得到的返回值为null

然后我尝试做一些更基本的事情,比如获取画布的宽度属性

JavascriptExecutor jse = (JavascriptExecutor) driver;
Object width= jse.executeScript("arguments[0].getAttribute('width');",canvas);
我又一次变空了。画布
WebElement
由Selenium很好地识别,并且它的“宽度”属性存在-我可以使用
WebDriver
getAttribute
方法检索它

我想我用错了


谢谢你的帮助

return
关键字添加到脚本中


PS:如果问题解决了,请告诉我,否则我们可以尝试其他方法。

向脚本添加
return
关键字


PS:如果问题已解决,请告诉我,否则我们可以尝试其他方法。

对于原始代码,您只需添加
return
即可获取值。如果需要,还可以将
对象
返回转换为字符串

String imageURL = (String) jse.executeScript("return arguments[0].toDataURL('image/png');", canvas);
System.out.println(imageURL);
对于宽度部分,您甚至不需要JSE

WebElement canvas = driver.findElement(...);
System.out.println(canvas.getAttribute("width"));

对于原始代码,只需添加
return
即可获得值。如果需要,还可以将
对象
返回转换为字符串

String imageURL = (String) jse.executeScript("return arguments[0].toDataURL('image/png');", canvas);
System.out.println(imageURL);
对于宽度部分,您甚至不需要JSE

WebElement canvas = driver.findElement(...);
System.out.println(canvas.getAttribute("width"));
通过这段代码,您可以得到base64图像的字符串


使用此代码,您将获得base64图像字符串

谢谢!这就是问题所在!您知道在Java中将这个字符串转换为图像的正确方法是什么吗?字符串的开头是这样的:“数据:image/png;base64,ivborw0kgoaaaa…”是的,我知道,您需要三行代码:
字符串base64ImageContent=RegExService.findFirst(“数据:image\\/.*;base64,([^)^\\“]*”,url,false,1);
byte[]bytesOfImage=base64.getDecoder().decode(base64ImageContent);
文件。write(path.get(fileManagerService.getMediaPath(),checksum.getChecksumFile()),bytesOfImage);谢谢!这就是问题所在!您知道在Java中将此字符串转换为图像的正确方法吗?字符串的开头如下:“数据:image/png;base64,iVBORw0KGgoAAAA…”。。。。“是的,我知道,您需要三行代码:
字符串base64ImageContent=RegExService.findFirst(“数据:image\\/.*;base64,([^)^\“]*”,url,false,1);
byte[]bytesOfImage=base64.getDecoder().decode(base64ImageContent);
Files.write(path.get(fileManagerService.getMediaPath(),checksumfile()),bytesOfImage);