2010-06-09 6 views

답변

0

당신은 자바 스크립트를 실행하여, this.browserbot.findElement('/html/body/div/div//input')를 사용하는 것을 얻을 수에 관련된 모든 노드의 ID를 얻으려면 :

을 물론 소스 언어에 따라 다르지만 다음과 같이 될 수 있습니다 (perl에서는 테스트되지 않음).

#first count the number of inputs with ids 
my $count = $selObj->get_xpath_count('/html/body/div/div//input[@id]'); 

#build a javascript that iterates through the inputs and saves their IDs 
my $javascript; 
$javascript .= 'var elements = [];'; 
$javascript .= "for (i=1;i<=$count;i++)"; 
$javascript .= " elements.push(this.browserbot.findElement('/html/body/div/div/input['+i+']').id);"; 
#the last thing it should do is output a string, which Selenium will return to you 
$javascript .= "elements.join(',');"; 

my $idString = $selObj->get_eval($javascript); 

항상 더 직접적인 방법이 있어야한다고 생각했지만 아직 찾지 못했습니다!

EDITED 주석에 따라 for 루프 수가 1에서 시작하고 $count을 포함해야하며 findElement 행은 입력 전에 하나의 슬래시 만 필요합니다. 모든 페이지에 집착

셀레늄의 자바 스크립트가 특정 쿼리에 대한 DOM 요소의 배열을 반환 eval_xpath라는 기능을 포함한다 : 더 의견에 따라 완전히 다른 아이디어를 추가

EDIT2. 네가 원하는 것 같은데?

는 여기에 내가 자바 스크립트가 (다시, 검증되지 않은)처럼 보일 것이라고 생각 무엇을 : 당신은 getXpathCount와 함께 getAttribute을 사용할 수 있습니다

var elements = eval_xpath('/html/body/div/div//input',this.browserbot.getCurrentWindow().document); 
var results = []; 
for (i=0;i<elements.length;i++){ 
    results.push(elements[i].id); 
} 

results.join(','); 
+0

당신은 자바에서이 작업을 수행하는 코드가하는 일이겠습니까? – Reflux

+0

죄송 합니다만, 유일한 차이점은 셀렌 함수라는 것입니다. 자바 문서를 보면,'DefaultSelenium' 객체에서'getXpathCount'와'getEval'이 필요합니다. – Ryley

+0

Ok i figured 어떻게 자바에서 이것을 구현하지만 내 노드가 [1] 입력 [1] 입력되지 않기 때문에 문제가 있습니다. 내 xpath는 절대 xpath가 아니며 기본적으로/html/body/div/div로 시작하는 xpath에 대한 모든 입력을 원합니다. – Reflux

7

. 자바

셀레늄 한 예는 다음과 같습니다

int inputs = selenium.getXpathCount("/html/body/div/div/descendant::input").intValue(); 
for (int i=1; i<=inputs; i++) { 
    System.out.println(selenium.getAttribute("/html/body/div/div/descendant::input[" + i + "]@id")); 
} 

자바에서 셀레늄이 예는 다음과 같습니다

List<WebElement> inputs = driver.findElements(By.xpath("/html/body/div/div/descendant::input")); 
for (WebElement input : inputs) { 
    System.out.println(input.getAttribute("id")); 
} 
+0

코드가 작동하지만 자손의 철자가 틀렸으므로 처음에는 유효하지 않은 xpath : P가 나타납니다. – Reflux

+1

오타를 수정했습니다 (죄송합니다). 그러나'/'는'/ descendant ::'와 같지 않으므로 예기치 않은 동작이 발생할 수 있습니다. 또한 속성을 가져 오는 Selenium 명령이있을 때 JavaScript를 모두 사용해야하는 이유는 무엇입니까? –

+0

내 코드 (Selenium 1)에 대한 유일한 주장은 요소 수가 많으면 코드가 요소 당 하나가 아니라 브라우저를 한 번만 넘기 게된다는 것입니다. 내 경험상, 그것은 오랜 시간이 걸릴 수 있습니다. Selenium 2에서는 코드가 더 나은 방법으로 보인다. – Ryley

관련 문제