【问题标题】:Unable to Handle Save As Window to save an Image file from website无法处理另存为窗口以保存来自网站的图像文件
【发布时间】:2017-02-13 11:05:13
【问题描述】:

我正在尝试使用 selenium Java 中的 Actions 和 Robot 类保存图像文件。我通过 contextclick() 右键单击​​图像,然后使用 CTRL+v 保存为图像选项。但是我无法访问 Save As 的窗口对话框。我也无法调试,因为调试也不会将我带到那一行,以便我可以检查问题。

下面是代码:

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

请查看上述问题。

【问题讨论】:

  • 您的意思是您正在获得“另存为”浏览文件向导,但您无法访问它?如果你附上它的任何截图,它会很容易帮助你!
  • 感谢您的回复。我可能无法在 cmets 中附加任何屏幕截图。但是,当我们右键单击某个图像时,我们会得到各种选项,其中一个是“将图像另存为”,然后您会得到一个另存为对话框(Windows)。现在通过 selenium,我已成功单击右键单击选项“图像另存为”,另存为的对话框也打开了。但是我无法访问对话框上的“文件名”和保存按钮,因此我可以传递我需要保存图像文件的位置。能否请您提供帮助。
  • 单击另存为时文件浏览器是否未突出显示?你可以在哪里输入你的路径?

标签: java selenium selenium-webdriver


【解决方案1】:

完成这项工作的技巧非常简单。您手动右键单击图像并点击“另存为”。现在尝试使用键盘输入文件路径和向导上的“保存”按钮。

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

使用机器人类实现相同的键盘流程!

希望对你有帮助!

【讨论】:

  • 感谢您的回复,我之前已经尝试过了,但是我的代码在这行代码 action.contextClick(imgRightClick).sendKeys(Keys.CONTROL, "v").build() 之后停止执行。履行();当我尝试调试我的进一步代码时,即机器人类没有执行。请看我上面的代码。谢谢。
  • 您是否尝试使用 selenium 聚焦图像,但使用机器人类右键单击或 ctrl+v?
  • 通过 selenium 我已经到达了 Windows 的另存为对话框,但我坚持给它一个保存位置。
  • 控件没有切换到“另存为”向导吗?自动?
  • 是的.. 我无法控制另存为向导.. 虽然我可以通过 selenium 成功打开它。
【解决方案2】:

这是下载图片的示例代码,对我来说效果很好。

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


}
}

希望对你有帮助!

【讨论】:

  • 我尝试按原样使用您的代码(更改元素 ID 和按下的箭头键的数量),但是我仍然无法控制“另存为”向导。我正在使用 selenium 2.42.2 版本和 24.7 版本的 mozilla,这可能是我无法控制向导的问题。请提出建议。
  • 你能在不编辑任何东西的情况下尝试相同的脚本吗?以便我们可以查看它是仅在您的站点中还是在一般情况下存在问题?版本可能有问题,我使用的是 selenium 2.45 和 firefox 43。
  • 我现在已经使用了您的代码,并且在控制 SaveAs 向导时出现了同样的问题。您共享的代码也面临保存图像的问题。我必须手动单击应该由 selenium 完成的保存按钮。
  • hmm 那么这是一个普遍的问题.. 尝试使用相同的 firefox 版本.. 我在使用 firefox 51 时确实遇到了问题,但现在我已经降级到 37.0 可以正常工作
  • 我不能降级我的 Firefox,因为这是我的要求。那么还有什么办法可以解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多