【问题标题】:Selenium Webdriver FIle Upload error element ice:inputFileSelenium Webdriver FIle Upload 错误元素 ice:inputFile
【发布时间】:2013-07-16 05:41:25
【问题描述】:

这是我的第一篇文章,很抱歉再次提出同样的问题。我遇到了一个关于在 Selenium Web Driver 中上传文件的问题。我在这个论坛上搜索了很多,但解决方案对我不起作用。文件浏览按钮元素嵌入文件文本区域(即通过文件浏览对话框浏览后打印文件路径的位置),但上传按钮是独立的。

整个元素代码为:

<input class="iceInpFileTxt" type="file" size="35" name="upload">

我无法使用 click() 方法单击“浏览”按钮。我也尝试过使用 Autoit/Robot。

来自 JSP 页面的元素代码: <ice:inputFile id="fileUpload" width="600" autoUpload="true" value="#{practitionerLoadDataBean.inputFile}" actionListener="#{practitionerLoadControllerBean.browse}"/>

我知道输入类型是文件,所以 sendkeys() 应该可以工作。我一直在尝试的代码是:

WebElement elem = driver.findElement(By.xpath("//input[@name='upload']")); elem.sendKeys("<PATH>");

错误信息显示为: org.openqa.selenium.remote.ErrorHandler$UnknownServerException:Unable to locate element: {"method":"xpath","selector":"//input[@name='upload']"}

请让我知道我的错误在哪里。提前致谢。

【问题讨论】:

    标签: file selenium upload webdriver


    【解决方案1】:

    如果元素只是不可见,它就会被发现,但你将无法与之交互。通常的解决方案是四处寻找框架。

    You can't search for elements contained in frames, you have to switch your driver's context to that frame first.

    driver.switchTo().frame("frameName");

    然后您将能够找到元素并以通常的方式上传文件(请使用此处其他答案描述的sendKeys() 方法)。

    【讨论】:

      【解决方案2】:

      请确认输入元素可见

      不要点击浏览按钮,它会打开一个系统级对话框来上传文件,在 selenium 中处理这个非常繁琐。

      您可以使用以下方法:

      driver.find_element(:id,'videoupload').send_keys("E:\\video.flv")

      请检查代码中的“\\”。

      请记住,仅当您发送文件的元素应采用格式时,上传才会起作用

      希望这对你有用。

      干杯!!

      【讨论】:

      • 感谢@Sidram Waghmare 的回复。这是页面的整个表单:
        。你能确认元素是否隐藏吗?如果是,是否有任何解决方法可以自动执行此操作? TIA。
      • 嗨,avishek,是的,您的输入元素是隐藏的,因为在您的代码中它清楚地显示了 input type="hidden"。仅当您的输入元素可见且不应隐藏时,上述代码才有效。一个好心的建议是,从下次开始,请将您的代码粘贴到脚本中。这对我们加深理解非常有用.. :)
      • 谢谢@Sidram,顺便问一下,有什么办法可以自动完成吗?请提及您是否可以提供任何指示,因为我对此文件上传部分的自动化感到困惑。我与一位开发人员交谈过,他说元素的属性不是由他们设置的,而是他们使用的框架自动设置它。
      【解决方案3】:

      使用 SendKeys 上传文件

      FirefoxDriver driver = new FirefoxDriver();
      
      driver.get("URl");
      
      File file=null;
      
      try
      {
      file=new File("file path");
      }
      
      catch(Exception e)
      {
      e.printStackTrace();
      }
      
      Assert.assertTrue(file.exists());
      
      WebElement browserButton=driver.findElement(By.id("button Id"));
      
      browserButton.sendkeys(file.getAbsolutePath());
      

      【讨论】:

      • 感谢您的回复,但您能否检查我上传的元素标签并检查这是否适用于您的代码。我认为你的代码是白痴打样,比我分享的更正确。但目的是一样的,工作原理也是一样的。但我无法找到元素本身。如果您能就此提供一些更详细的意见,我将不胜感激。直到。
      • 如您所见 ,输入类型是文件,因此 CLICK 将不起作用..
      • 我修改代码如下:File file=null;尝试 { file=new File("D:\\AD\\Prac\\Prac\\002 EditPrac 添加人员 Error.xml-revHEAD.svn000.tmp.xml"); } 捕捉(异常 e){ e.printStackTrace(); } Assert.assertTrue(file.exists()); WebElement browserButton=driver.findElement(By.className("iceInpFileTxt")); browserButton.sendKeys(file.getAbsolutePath()); - 仍然没有找到相同的错误元素。我也尝试过使用 xpath,但这也不起作用。请指教,
      【解决方案4】:

      试试这个代码:

      driver.FindElement(By.XPath("/html/body/div[2]/div[5]/div/div/div/div[2]/div[2]/div[1]/div/div[1]")).click();
      

      【讨论】:

        猜你喜欢
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 2016-05-23
        • 2018-06-06
        • 2013-11-13
        相关资源
        最近更新 更多