使用sendkey的Selenium上传无法正常工作-由于上传之前会弹出一个窗口

时间:2019-06-20 11:49:57

标签: java selenium selenium-webdriver ui-automation

我有一种方案,其中在网页中上传具有浏览按钮的文件,然后单击该浏览按钮,将显示Windows浏览窗口。我选择文件,然后单击窗口中的上载按钮。现在,网页上会显示一个叠加层弹出窗口,以输入上传文件的名称,然后点击保存按钮。

这不能自动执行,因为在上传之前有一个弹出式叠加屏幕。    以下是我使用的代码。

WebElement PDFUpload =driver.findElement(By.xpath("(//div[@class='upload-area'])[2]"));
PDFUpload.sendKeys("C:\\test\\Testuploads\\test.pdf");

在选择文件后单击上载后没有覆盖屏幕时,此功能正常。但是当在网页上实现用于命名上传文件的叠加层时,该测试未运行。也尝试过使用机械手类,但仍然无法正常工作(可能是由于我错误地输入了机械手类)。但是,请离开本案例,因为在我正在开发的这种动态网站上,我不认为使用机器人课程是一种好习惯。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

此方法用于处理Windows文件上传对话框,该对话框无法使用Selenium处理。请按照以下步骤操作:

  • 单击“文件上传/选择文件”按钮,以使文件 显示“上传”对话框。
driver.findElement(By.id("uploadbutton")).click;
  • 将文件的绝对路径复制到剪贴板
  

StringSelection ss = new StringSelection(“ D:/Test/Test1.docx”);   Toolkit.getDefaultToolkit()。getSystemClipboard()。setContents(ss,   null);

  • 将文件的绝对路径粘贴到“文件”的“文件名”字段中 上载对话框
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

答案 1 :(得分:0)

您可以尝试通过自动化代码本身删除覆盖屏幕,然后上传文件。

使用JavaScript将css display属性设置为none。

通过网络驱动程序执行javascript

argument[0].style.display = "none";

其中参数[0]是引用覆盖屏幕的WebElement。

我知道这种方法可以修改原始网页,因此值得商bat,但是,如果要测试的更重要的功能是文件上传,那就应该可以了。