2014-06-24 7 views
2

Selenium Webdriver with Python을 사용하여 파일 업로드가 작동하지 않습니다. 어제 셀레늄과 파이썬을 다시 설치 했으므로 모든 것이 최신이라고 확신합니다. 도움이된다면 Windows 7을 사용하고 있습니다. 나는 다른 사람들이이 질문을 한 것을 알고 있으며, 모두가 권장하는 대답은 파일 업로드 요소에서 send_keys 명령을 사용하는 것입니다. 파일 업로드가있는 다른 웹 페이지에서이 작업을 시도해 보았습니다. 적어도 하나의 다른 페이지에서 작업 할 수있게되었지만 테스트 할 페이지에서 동일한 절차를 시도해도 아무 것도 일어나지 않습니다. 나는이 일을 할 수없는 다른 사람들의 사례를 발견 한 것을 기억하고 있다고 생각합니다. 그래서 나는이 문제가있는 유일한 사람은 아니라고 생각합니다.Selenium Webdriver에서 send_keys를 사용하여 파일을 업로드 할 수 없습니다.

관련성이있는 한 가지는 파일 업로드 양식에서 send_keys를 시도했을 때 요소가 보이지 않아서 상호 작용할 수 없다는 오류가 발생했습니다 (사실, 눈에 보이지는 않지만 분명히 셀레늄의 눈에는 없다). I 미리 자바 스크립트의 행을 실행함으로써이 문제를 해결 :

document.getElementById('UploadDocumentPopup').style.display = 'block'; 

(UploadDocumentPopup)의 또 다른 잠재적으로 유용한 토막 다시 점이다 파일 입력부의 부모 요소)

이고 I는 셀레늄 1을 사용했을 때/Selenium RC, attach_file 명령 (Firefox에서만 지원됨)을 사용하여 성공했습니다.

도움이 될 경우 여기에서 작업중인 페이지로 이동하는 방법에 대해 알아보십시오. https://qa.infosnap.com/family6/gosnap.aspx?action=3345&culture=en 링크를 클릭하고 "작업 계속"을 클릭 한 다음 [email protected] 전자 메일 주소와 "asdfjkl;"(인용 부호 제외)을 사용하여 로그인하십시오. 그런 다음 "작업 계속"링크 중 하나를 클릭하십시오. 가져 오는 페이지에는 문서 업로드 및 사진 업로드 섹션이 있어야합니다. 그렇지 않다면 "prev"와 "next"를 사용하여 서핑을하고 페이지가 3 페이지 만있는 것을 찾으십시오. 관련 코드가 있습니다. 다른 여러 가지를 시도해 보았습니다. 도움이되고 기억할 수 있다면 기꺼이 나누어 드리겠습니다. 그러나 이것이 내가 생각하기에 "작동하는"것으로 생각되는 방식입니다. 기분이 좋으면 페이지 소스를 자유롭게 확인하십시오. 그러나 FYI 'documentfile'은 페이지 소스의 input type = 'file'요소의 이름이고, 마지막 행의 xpath는 "upload "버튼을 누릅니다.

js = "document.getElementById('UploadDocumentPopup').style.display = 'block';" 
wd.execute_script(js) 
wd.find_element_by_link_text("Upload Document...").click() 
wd.find_element_by_id("documentfile").send_keys("C:\\Users\\username\\testdoc.rtf") 
#ActionChains(wd).send_keys(Keys.ESCAPE) 
wd.find_element_by_xpath("//div[@id='modal_container']/div/form/div/input[1]").click() 

업데이트 : 나는 파이어 폭스 이외에이 시도하지 않았다 실현, 그래서 나는 IE11 시도 - send_keys를 호출 할 때, 기본 OS 파일 업로드 박스가 와서 무슨 일이 (나는라고 생각하는 이상한, "탐색"버튼을 클릭하지 않았기 때문에 - send_keys 만 사용) 텍스트가 파일 이름 필드에 입력되었습니다. 그런 다음 파일 업로드 대화가 사라졌습니다.하지만 아무 일도 없었던 것처럼 보입니다. 요약 : Internet Explorer에서 파일 업로드 대화 상자가 열리고 파일 경로가이 대화 상자에 입력되면 대화 상자가 사라지지만 파일을 실제로 첨부하지는 않습니다. Firefox에서는 대화 상자가 열리지 않고 첨부 된 파일이 없습니다. Chrome은 Firefox와 동일합니다.

편집 : 여기에 문서 업로드 섹션의 HTML 코드이다 : 나는 또한 내가 완전히 셀레늄 기반 솔루션을 찾고 있어요 언급해야

<div id="UploadDocumentPopup" style="display:none;"> 
    <div class="popupmenu"> 
     <h1 style="margin-top:0px; padding-bottom:10px; border-bottom:1px solid #CCCCCC;"> 
      Upload Document 
     </h1> 
     <p> 
      Choose a file to upload. 
     </p> 
     <form id="documentuploadform" action="services/documentservice.aspx" enctype="multipart/form-data" method="post" 
      onsubmit="return AIM.submit(this, {'onStart' : startUploadDocument, 'onComplete' : completeUploadDocument})"> 
      <input type="file" size="50" id="documentfile" name="documentfile" /> 
      <input type="hidden" name="cmd" value="upload" /> 
      <input type="hidden" id="documentuploadfield" name="field" /> 
      <div style="margin-top: 10px;"> 
       <input name="ctl00$OutsideFormContentPlaceholder$ctl06" type="submit" value="Upload" /> 
       <input name="ctl00$OutsideFormContentPlaceholder$ctl07" type="button" onclick="Control.Modal.close();" value="Cancel" /> 
      </div> 
     </form> 
    </div> 
</div> 

- 나는 AutoIt이와 비슷한 도구에 대해 알고는 있지만 원격으로 실행해야합니다.

+0

HTML은 어떻게 보이나요? 관련 HTML 스 니펫을 제공하십시오. – olyv

+0

@olyv 나는 그것이 도움이되기를 바란다. (또한, 나는 계속 코멘트를하려고 노력하고있다. 그리고 그것이 사라지는 것을 계속한다. - 그것이 내가 어리 석고, 아니면 나보다 단서가 더 많은 누군가가 그것을 삭제하고 있다면 - 어떤 경우에 나는 멈출 것이다. reposting) – user3771832

+0

http://stackoverflow.com/q/9726005/2504101 여기에'input type = "file"'에 대한 다른 해결책이 나와 있습니다. 먼저 시도하십시오. – olyv

답변

0

나는 코드가 정확한지 확인하기 위해 전체 스크립트를 참조해야 할 것이다, 그러나 이것은 당신과 함께 일할 것을 제공해야합니다 : 파일의 정확한 이름으로 <filename>을 교체해야합니다 어디

wd.find_element_by_css_selector('a[onclick*="uploadDocument"]').click() 
wd.find_element_by_css_selector('div#UploadDocumentPopup input#documentfile').send_keys(os.getcwd()+"/<filename>") 
wd.find_element_by_css_selector('div#UploadDocumentPopup input[value="Upload"]').click() 

을 업로드하려고합니다.이 버전에서는 os.getcwd()을 사용하여 testscript의 현재 작업 디렉토리를 얻은 다음 해당 작업 디렉토리의 끝에 파일 이름을 추가하여 다음 머신에서 중단되는 절대 경로를 지정하지 않고 모든 시스템에서 작동하는 범용 경로를 작성합니다. 이 코드에서는 Javascript 스 니펫이 더 이상 필요하지 않습니다.

CSS 선택기는 xpath보다 선호하기 때문에 사용하기 쉽습니다. 원하는 경우 쉽게 변환 할 수 있어야합니다. '= XPath는 아래

// 입력 [@ 유형을 사용하여 파일을 (당신이 정말로 댓글을 삭제할 수 없습니다와 나는 이동을해야하는 경우)

0

찾기 웹 요소를 태그 입력을하고 ='파일을 '입력 ']

귀하의 경우에는 "documentfile"요소입니다.

document.getElementById를 ("documentfile") style.visibility는 = "볼 수";

하면 볼 자바 스크립트를 사용합니다.

절대 파일 경로로

driver.findElement (By.xpath ("// 입력 [@ 타입 = '파일']")) 상기 입력 요소에 키를 보낸다. SendKeys 매크로 ("/ 절대/filepath.jpeg을 ");


문제가 발생했을 경우 알려주십시오.

관련 문제