2010-08-18 4 views
1

사이트에서 실행할 스크립트를 생성하기 위해 browsermob과 selenium을 사용하고 있습니다. 페이지의 모든 요소를 ​​특정 이름으로 가져 오려고합니다. 내 문제는 내가 사용하려고 할 때 window.document.getElementsByName("name"); browsermob는 window가 정의되지 않았다고 말합니다. 어떻게 창을 정의합니까?browsermob을 사용하여 셀렌에서 창 선언하기

답변

3

selenium.getEval()을 호출해야합니다. 이 호출의 서명은 실행되는 JavaScript 인 문자열 인수를 브라우저에 입력하고 문자열 표현이 반환되는 문자열을 반환한다는 것입니다.

마지막 부분 - 문자열 표현 -이 중요합니다. 당신은 확실히 BrowserMob 스크립트에서이 작업을 수행 할 수는 없지만 :

var elements = window.document.getElementsByName("name"); 

또한이 작업을 수행 할 수 없습니다

var elements = selenium.getEval('return window.document.getElementsByName("name")'); 

을 그 두 번째 예를 들어 당신이해야 할 일에 가까운 반면, 그렇지 않아 getElementsByName은 문자열로 변환 된 DOM 객체의 배열을 반환하기 때문에 작동 할 것입니다. 대신, 을 당신이 그 요소들로 무엇을하고 싶은지를 결정하고, 당신이 원하는 것을 정확하게 리턴하는 더 큰 JS 스 니펫을 eval에 생성 할 필요가 있습니다.

예를 들어,이 페이지의 두 번째 링크의 href 속성을 반환합니다

var secondHref = selenium.getEval('return window.document.getElementsByName("a")[1].href'); 

나는이 도움이되기를 바랍니다. 중요한 점은 BrowserMob 스크립트는 JavaScript로 작성 될 수 있지만 실행되는 JavaScript 환경은 이 아니며 브라우저에는이 아님을 이해해야합니다. 브라우저에서 임의의 JavaScript를 평가하려면 getEval()을 거쳐야하므로 약간의 혼동을 줄 수있는 약간의 JavaScript-in-JavaScript 상황이 생성됩니다.

+0

감사합니다. 내가 물어 본 후에 대부분을 알아 냈지만 가지고있다. selenium.getEval ('window.document.getElementsByName ("a") [1] .href'); 반환은 무엇을합니까? – chromedude

관련 문제