2016-08-16 16 views
0

Selenium (C#)을 사용하여 첨부 파일을 업로드하려고합니다.Selenium에서 Windows 업로드 대화 상자를 사용하여 파일 업로드를 처리하는 방법

사이트의 DOM을 확인한 후 파일 첨부 링크가 object tags임을 확인했습니다. 나는 윈도우 업로드 대화로 전환해야

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
fileAttachTA.Click(); 
String filePath = "C:/User/My Documents/file.txt"; 

셀레늄 개체를 찾을 수 있었지만 : 내가 지금까지 시도했다

<object id="ctl00_mainContent_rauFilessilverlight03" class="ruObject" height="22px" type="application/x-silverlight-2" data="data:application/x-silverlight-2," style="width: 100%;"> 
<param value="/App/somelongjunkyparameters" name="source"/> 
<param value="true" name="windowless"/> <param value="transparent" name="background"/> 
<param value="some number" name="minRuntimeVersion"/> 
<param value="PostData=anotherlongjunkyparameters,SilverlightRowId=ctl00_mainContent_rauFilessilverlight03,AsyncUploadId=ctl00_mainContent_rauFiles,MultipleSelection=Disabled,AllowedFileExtensions=,ServiceHandlerUrl=/App/Telerik.Web.UI.WebResource type=rau,MaxFileSize=0" name="InitParams"/> 
<param value="true" name="autoUpgrade"/> 
</object> 

: 아래 은 HTML 발췌 한 것입니다? 이 경험이있는 사람의 의견을 기다리고 있습니다.

감사합니다.

+0

시도한 코드의 문제점은 무엇입니까 ?? 어떤 예외가 있습니까? –

+0

그냥 Windows 업로드 대화 상자로 전환하지 않습니다 – Marj

답변

1

웹 사이트를 개발 한 사람은 누구나 파일을 업로드하는 데 비표준 메커니즘을 사용하고 있습니다. 제공 한 HTML을 보면 Silverlight 컨트롤처럼 보입니다. 페이지가 표준 HTML 업로드 메커니즘 (예 : <input type="file"> 요소)을 사용하고있을 때 Selenium WebDriver가 파일 선택 대화 상자를 적절하게 처리 할 수 ​​있지만 비표준 업로드 메커니즘을 사용하여 그렇게 할 수는 없습니다. Selenium 외부의 대화 상자를 처리하는 방법을 찾아야합니다.

+0

fileAttachTA.SendKeys (filePath)를 추가하려고했습니다. 그러나 Windows 업로드 대화 상자 자체에는 들어 가지 않습니다. – Marj

+1

그러나 그것이 내 요점입니다. 'fileAttachTA'에있는 변수는 '요소가 아닙니다. ''요소입니다. 그래서,'SendKeys'는 그것에 작동하지 않을 것입니다. 그것이 나의 대답의 요점이다. – JimEvans

0

파일을 다운로드하거나 업로드 할 때 Windows 대화 상자와 대화하는 데 문제가있었습니다. 내 솔루션 user32.dll GetForegroundWindow() 활용할 수있었습니다. 그런 다음 대화 상자가 (여전히 user32.dll을 사용하는) 헤더 텍스트에 따라 사라지도록 대기 메서드를 만들었습니다. 그런 다음 BeginInvoke에 대한 작업을 마지막으로 생성하고 창이 팝업 될 때까지 기다렸다가 보내기 키로 진행했습니다. 내 앞에 코드 예제가 없지만 Google user32.dll Selenium을 사용하면 몇 가지 정보를 얻을 수 있습니다.

2

나는 그것을 가지고 무엇을 내가 한 것은이 있었다 :

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
    fileAttachTA.Click(); 

    //Switch into the windows upload dialog 
    SendKeys.SendWait("^a"); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(file); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(@"{Enter}"); 
    Thread.Sleep(1000); 

은 내가 SendKeys.SendWait이 일을 얻을 수있는 System.Windows.Forms를 사용했다. 모두에게 감사드립니다!