【问题标题】:Selenium: testing django form, file not uploadSelenium:测试 django 表单,文件未上传
【发布时间】:2017-08-28 11:05:34
【问题描述】:

我有一个类似于 django 管理表单的表单,用户可以在其中创建对象并使用弹出窗口中的单独表单将相关模型附加到它。

在我的表单中,用户可以将文件附加到模型。他们点击加号按钮...

然后出现这样的弹出表单:

文件上传并提交表单后,新文件被创建并显示在选择输入中:

现在,我想使用 selenium 测试这种行为。但是,当表单提交后弹出窗口关闭时,选择输入仍然为空。

这是我在测试中附加文件的方式:

# select plus btn
plus_btn = self.browser.find_element_by_css_selector(
    ".related-widget-wrapper select#id_files + a")

plus_btn.click()

self.switch_to_popup()

file_input = self.browser.find_element_by_css_selector(
    "input[name='_file']")

file_input.send_keys(os.getcwd() + "/test.txt")

self.browser.find_element_by_css_selector(
    "input[type='submit']").click()

self.switch_to_main()

PS: 问题不在于 self.switch_to_popupself.switch_to_main。这些是我创建的有效的工作方法。

【问题讨论】:

  • 检查是否只有一个输入框:print(len(self.browser.find_elements_by_css_selector( "input[name='_file']")))
  • 文件上传在 selenium 中有点棘手。使用 send_keys 也是尝试使用机器人框架或尝试模拟操作系统的键盘控制的一种方法。尝试记录 selenium IDE/Builder,看看 selenium 是如何处理它的。
  • 我刚查了一下,只有一个输入框。
  • 你做了哪些调试,发现了什么?在提交单击行上放置一个断点并运行脚本。一旦中断,请稍等...文件名是否正确显示?如果是这样,则可能是时间问题,您将不得不等待。
  • 查看开发者工具控制台在 Selenium 浏览器提交时是否显示问题或错误。它可能与页面有关

标签: python django selenium


【解决方案1】:

Selenium 以异步方式工作,因此在发生单击或其他事件后,您的测试代码可能会在字段自行更新之前的一小部分时间内检查字段的内容。我所做的是等待一个字段包含一个值,如下所示:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(self.browser, 10).until(
    EC.text_to_be_present_in_element(locator, 'This is test file'))

【讨论】:

  • 我希望我能理解你的回答:我在 self.switch_to_main() 之后添加了 time.sleep(10) 我在 之后的 select input + 中查找文件名file_input.send_keys(os.getcwd() + "/test.txt") 以防万一。但它什么也没改变。弹出关闭后仍然选择元素为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2019-01-02
  • 2017-03-31
  • 2021-05-13
  • 2017-03-11
  • 2017-10-18
  • 2019-06-30
相关资源
最近更新 更多