我需要使用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方法返回并能够运行上传方法?
答案 0 :(得分:0)
解决它。有一个iframe处理上传但被隐藏,并没有在第一时间看到它。 iframe包含一个也隐藏的类型文件的输入。要解决这个问题,请使用javascript:
显示iframeselenium.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'\\\\'作为路径分隔符。