블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT 2008.11.19 20:18

[ Selenium ] Selenium RC 를 사용해보자. II


 애초 Selenium 사용목적은 Test 목적이 아니었다 라는 것은 처음부터 말해왔습니다.
 Agent 로 사용할 Selenium 에서 필요한 기능은 바로 "파일 다운로드"인데요. 하지만 브라우저 자체 설정에서 매번 다운로드 매니저를 띄우고... javascript 의 confirm 이나 alert 이 아닌 대화창은 Selenium 으로 조작이 불가능하더군요.

 결국은 Firefox 설정을 만지는 수 밖에 없겠다 싶어서 [ 환경설정 ] 에서 뭐가 없나 찾아봤지만 뭐 별다른 것없어서... 결국은 about:config 로 직접 수정해보기로 했습니다.

  - http://kb.mozillazine.org/About:config_entries

 Firefox 에서 about:config 의 reference 를 보고 그럴 듯한 것들을 찾아서 바꿔보았습니다. browser.download.* 이 그럴듯한 것으로 보이길래, 해당 값들을 적당하게 수정해서 다운로드 하니.. 과연 다운로드 매니저가 안뜨더군요.

 그래서 Selenium RC Server 의 Firefox 에서 위에서 한 설정을 그대로 씌우고 작동을 했는데...
 결과는 안먹히덥니다. Selenium RC 에서 작동한 firefox 는 변경된 설정을 따르지 않는지 어떤지 잘 모르겠습니다. 뭔가 자기 나름대로의 기본값이 있나본데요.

 결국 검색해서 찾아낸 것은 -firefoxProfileTemplate 라는 옵션입니다.
 
 * 우선은, profile 이라는 디렉토리를 만들고,
 * 그리고 prefs.js 라는 파일을 만들어서, 변경할 옵션들을 모조리 거기에 잡아넣습니다.

 설정값은 아래의 링크를 참고했습니다.

 - http://clearspace.seleniumhq.org/message/31350

 그런데 위의 링크의 설정으로도 다운로드 매니저가 나오더군요. 그래서 다시 about:config 를 뒤지면서 그럴 듯한 놈을 찾아서 바꿔보았습니다. 제가 사용할 설정은 다음과 같습니다.

 * profile/prefs.js
user_pref("browser.download.dir", "/home/leejj/Desktop");
user_pref("browser.download.downloadDir", "/home/leejj/Desktop");
user_pref("browser.download.folderList", 2);
user_pref("browser.download.manager.showWhenStarting", false);
user_pref("browser.download.manager.useWindow", false);
user_pref("browser.startup.homepage_override.mstone", "ignore");

 위의 설정들이 어떤 내용인가에 대해서는 언급하지 않겠습니다. 위의 about:config reference 를 참고해주세요.

 이게 끝이 아닙니다. 방금전에 다시 해봤는데 안되더군요; 아무튼 원인은 mimeType.rdf 를 설정해주어야 하더군요.
 일반적으로 다운로드를 위해서 링크나 버튼을 클릭하면 아래와 같은 다운로드 매니저가 등장합니다.
[다시 묻지 않음]을 선택하면 [환경설정] 의 프로그램 탭에 등록되게 됩니다. 이 경우에는 "파일 저장"으로 등록이 되죠.
 

  [환경설정] - [프로그램] 탭에서는 위의 다운로드 매니저에서 등록한 파일 형식 Comma Separated Vars 는 파일저장으로 실행이 등록 되어 있습니다.

  그럼 이렇게 지정한 mime-type 을 mimeType.rdf 파일로 적어줘야할 필요성이 있습니다.
  Firefox 환경설정은 Selenium RC Server(여기에서는 Ubuntu) 에서 /etc/firefox-3.0/profile 에 있습니다.
 하지만 여기에서는 위의 형식들이 등록되어 있지 않습니다. 어디에 등록되어 있는 지 몰라서, 생각을 바꾸기로 했습니다.

  Selenium RC Server 는 매번 실행시에 브라우저의 커스텀 프로파일을 생성합니다. 클라이언트에서 RC 를 움직여서 Firefox 가 움직이고 있을 때 /tmp/customProfile****************/ 이라는 디렉토리가 생기죠. RC 에 의해 실행되고 있는 Firefox 에서 위처럼 파일을 다운로드 할때, [ 파일 저장 ]으로 하고 [ 다시 묻지 않음 ] 을 클릭하니... 그곳에 있는 mimeType.rdf 파일의 사이즈가 바뀌더군요.
  그래서 재빨리 그곳에 있는 mimeType.rdf 를 퍼와서 위의 prefs.js 가 있는 디렉토리와 같은 디렉토리에 넣어줍니다.

 * CSV 파일을 항상 저장하도록 설정하는 mimeType.rdf
<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <RDF:Description RDF:about="urn:mimetype:text/csv"
                   NC:value="text/csv"
                   NC:editable="true"
                   NC:fileExtensions="csv"
                   NC:description="CSV document">
    <NC:handlerProp RDF:resource="urn:mimetype:handler:text/csv"/>
  </RDF:Description>
  <RDF:Description RDF:about="urn:mimetype:externalApplication:text/csv"
                   NC:prettyName=""
                   NC:path="" />
  <RDF:Seq RDF:about="urn:mimetypes:root">
    <RDF:li RDF:resource="urn:mimetype:text/csv"/>
  </RDF:Seq>
  <RDF:Description RDF:about="urn:mimetype:handler:text/csv"
                   NC:alwaysAsk="false"
                   NC:saveToDisk="true">
    <NC:externalApplication RDF:resource="urn:mimetype:externalApplication:text/csv"/>
  </RDF:Description>
</RDF:RDF>

 물론 다운로드 해야할 파일 형식이 다른 것이 있다면 이렇게 추가해주어야할 것입니다.
 
 그리고 selenium-server 를 다시 띄워줄 때는 위에서 말한 -firefoxProfileTemplate 를 지정해줘야 합니다. 인수는 파일이 아닌 profile 디렉토리를 지정합니다.

 $ java -jar selenium-server.jar -firefoxProfileTemplate profile

 그리고 어떤 다운로드를 위한 버튼을 클릭하는 케이스를 IDE 로 만들어서 Client 코드로 실행합니다. 그러니 Selenium RC Server 의 Firefox 에서는 방금전과 같은 다운로드 매니저는 일절 출몰하지 않고, 그대로 진행되더군요. Download Directory 로 설정한 /home/leejj/Desktop 에서는 다운로드된 파일이 제대로 박혀있습니다.

 뭔가 이러면 되겠지 하던 게 제대로 안먹고.. 거기에 가장 치명적인 오타때문에 몇 십분을 허비한 것 같습니다. 아무튼 이걸로 원하는 Agent 를 위한 기능은 다 구현할 수 있겠다는 생각으로 맘이 편안해지기는 합니다. (뭐 당연히 구현할 때도 쩔쩔댈 일이 있을지도 모르겠지만요...)
신고
TOTAL 462,394 TODAY 21

티스토리 툴바