0

我需要使用 Python 和 Selenium 上传文件。当我单击上传 HTML 元素时,会打开一个“文件上传”窗口,并且 click() 方法不会返回,因为它等待完全加载页面。因此我无法继续使用 pywinauto 代码来控制窗口。

第一种方法点击 HTML 元素(一个 img)来上传一个新文件:

def add_file(self):
    return self.selenium.find_element(By.ID, "add_file").click()

第二种方法是使用 pywinauto 键入文件的路径,然后单击打开

def upload(self):
    from pywinauto import application
    app = application.Application()
    app.connect_(title_re = "File Upload")
    app.file_upload.TypeKeys("C:\\Path\\To\\FIle")
    app.file_upload.Open.Click()

如何强制 add_file 方法返回并能够运行上传方法?

4

1 回答 1

0

解决这个问题。有一个 iframe 处理上传,但被隐藏并且一开始没有看到它。iframe 包含一个也隐藏的文件类型的输入。要解决它,使用 javascript 使 iframe 可见:

selenium.execute_script("document.getElementById('iframe_id').style.display = 'block';")

然后切换到 iframe 并使输入也可见:

selenium.switch_to_frame(0)
selenium.execute_script("document.getElementById('input_field_id').type = 'visible';")

并简单地将路径发送到输入:

selenium.find_element(By.ID, 'input_field_id').send_keys("path\\\\to\\\\file")

对于 Windows,使用 4 '\\\\' 作为路径分隔符。

于 2013-03-13T14:50:03.457 回答