Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java 无法处理“另存为”窗口以从网站保存图像文件_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 无法处理“另存为”窗口以从网站保存图像文件

Java 无法处理“另存为”窗口以从网站保存图像文件,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我试图用SeleniumJava中的Actions和Robot类保存一个图像文件。我通过contextclick()右键单击图像,然后使用CTRL+v作为“另存为图像”选项。但是,我无法访问“另存为”的窗口对话框。我也无法调试,因为调试也不会将我带到该行以便检查问题 代码如下: WebElement imgRightClick=driver.findElement(By.xpath(".//table[contains(@id,'WebPart_twp285729713')]//img"));

我试图用SeleniumJava中的Actions和Robot类保存一个图像文件。我通过contextclick()右键单击图像,然后使用CTRL+v作为“另存为图像”选项。但是,我无法访问“另存为”的窗口对话框。我也无法调试,因为调试也不会将我带到该行以便检查问题

代码如下:

WebElement imgRightClick=driver.findElement(By.xpath(".//table[contains(@id,'WebPart_twp285729713')]//img")); 
                Actions action= new Actions(driver);
                action.contextClick(imgRightClick).sendKeys(Keys.CONTROL, "v").build().perform();

                Thread.sleep(2000);

                Robot robot = new Robot();  

                robot.keyPress(KeyEvent.VK_H);
                robot.keyRelease(KeyEvent.VK_H);
                Thread.sleep(2000);

                robot.keyPress(KeyEvent.VK_COLON);
                robot.keyRelease(KeyEvent.VK_COLON);

                Thread.sleep(2000);
                robot.keyPress(KeyEvent.VK_BACK_SLASH);
                robot.keyRelease(KeyEvent.VK_BACK_SLASH);

                Thread.sleep(2000);
                robot.keyPress(KeyEvent.VK_ENTER);
                Thread.sleep(3000L); 

请仔细研究一下上述问题。

完成这项工作的诀窍非常简单。您可以手动右键单击图像并点击“另存为”。现在,只需使用键盘,即可在向导上输入文件路径和“保存”按钮

您可以使用“TAB”将控件切换到各种元素,然后单击“ENTER”

使用Robot类实现相同的键盘流


希望有帮助

这是一个下载图像的示例代码,对我来说效果很好

import java.awt.Robot;
import java.awt.event.KeyEvent;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;


public class Sample {

public static void main(String[] args) throws Exception 
{
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.google.co.in");
    driver.findElement(By.name("q")).sendKeys("selenium");
    Actions action= new Actions(driver);
    action.contextClick(driver.findElement(By.id("logo")).findElement(By.tagName("img"))).build().perform();
    action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
    Thread.sleep(2000);
    action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
    Thread.sleep(2000);
    action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
    Thread.sleep(2000);
    action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
    Thread.sleep(2000);
    action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
    Thread.sleep(2000);
    Robot RoboKey = new Robot();
    RoboKey.keyPress(KeyEvent.VK_W);
    RoboKey.keyPress(KeyEvent.VK_A);
    RoboKey.keyPress(KeyEvent.VK_M);
    RoboKey.keyPress(KeyEvent.VK_A);
    RoboKey.keyPress(KeyEvent.VK_N);
    RoboKey.keyPress(KeyEvent.VK_PERIOD);
    RoboKey.keyPress(KeyEvent.VK_J);
    RoboKey.keyPress(KeyEvent.VK_P);
    RoboKey.keyPress(KeyEvent.VK_G);
    Thread.sleep(2000);
    RoboKey.keyPress(KeyEvent.VK_ENTER);


}
}

希望有帮助

您的意思是您正在获取“另存为”浏览文件向导,但无法访问它?如果你附上任何屏幕截图,它看起来会很容易帮助你!谢谢你的回复。我可能无法在评论中附加任何屏幕截图。然而,当我们右键单击一些图像时,我们会得到各种选项,其中一个是“另存图像为”,然后会出现另存为对话框(Windows)。现在,通过selenium,我成功地单击了右键单击选项“将图像另存为”,并打开了另存为的dailog框。但是,我无法访问对话框上的“文件名”和“保存”按钮,以便传递需要保存图像文件的位置。请提供帮助。单击“另存为”时是否未突出显示文件浏览器?您可以在哪里输入路径?感谢您的回复,我之前已经尝试过了,但是我的代码在这行代码操作之后停止执行。contextClick(imgRightClick)。sendKeys(Keys.CONTROL,“v”).build().perform();当我尝试调试我的进一步代码时,即Robot类没有执行。请看一下我上面的代码。谢谢。您是否尝试使用selenium对图像进行对焦,但使用robot类单击鼠标右键或ctrl+v?通过selenium,我已进入windows“另存为”对话框,但我仍无法将其保存到某个位置。控件是否未切换到“另存为”向导?自动?是的。。我无法控制另存为向导。。虽然我可以通过selenium成功地打开它。我尝试按原样使用您的代码(更改元素id和按下的箭头键数),但是我仍然无法控制“另存为向导”。我正在使用selenium 2.42.2版本和24.7版本的mozilla。这可能是我无法控制向导的原因。请建议。你能在不编辑任何内容的情况下尝试相同的脚本吗?因此,我们可以看到它是否只是在您的网站或一般的问题?版本可能有问题,我使用的是selenium 2.45和firefox 43。我现在已经使用了您的代码,在控制SaveAs向导时出现了相同的问题。您共享的代码在保存图像时也面临问题。我必须手动点击保存按钮,这应该由selenium完成。嗯,这是一个普遍问题。。尝试使用相同的firefox版本。我在使用firefox 51时确实遇到了问题,但现在我已经降级到37.0,workedI无法降级我的firefox,因为这是我的要求。那么,还有其他解决办法吗?