Selenium WebDriver ElementNotVisible输入类型='file'元素的错误

时间:2013-05-27 20:42:54

标签: ruby file-io selenium webdriver selenium-webdriver

我正在使用selenium webdriver来尝试和模拟文件上传

我有一个文件输入字段:

<input class="upload_file_field" id="main_image_file" label="false" name="banner_image_file" type="file" />

在我的测试中使用它会导致ElementNotVisibleError

@driver.find_element(:id, "main_image_file").send_keys "/Users/dan/Desktop/sample.jpg"

我甚至尝试在尝试上传文件之前更改可见性:

@driver.execute_script("arguments[0].style.visibility='visible'; arguments[0].style.display='block'; arguments[0].style.height='100px'; arguments[0].style.width='100px'; arguments[0].style.opacity=1; arguments[0].style.zindex=20", @driver.find_element(:id, "main_image_file"))

它仍会导致ElementNotVisibleError

非常感谢任何建议

更新

好的,事实证明有几个条件可以隐藏元素:

  1. 不能有0不透明度
  2. 必须有长度和宽度&gt; 0
  3. 无法隐藏可见性
  4. 显示不能为无
  5. transform属性可以移动页面上的元素,使其不可见
  6. 我的问题在于转换属性。这是一种通过将输入字段完全转换为页面来隐藏输入字段的方式,因此我可以使用更好的样式按钮来使用jQuery文件上传。

    之后,

    @driver.find_element(:id, "main_image_file").send_keys "/Users/dan/Desktop/sample.jpg"
    

    在模拟用户选择文件方面表现非常出色

2 个答案:

答案 0 :(得分:0)

可能是由于某些错误导致页面未加载的情况。您可以尝试使用以下错误:

raise(@driver.page_source.to_s)

在find_element命令之前?

通过这种方式,您可以确保输入字段实际位于页面上,如Selenium所示。

答案 1 :(得分:0)

你使用Ruby但是无论如何如果这个问题仍然适用于你那么请看看我提供答案的类似问题How to click on <input type=file> across browsers using Selenium Webdriver?