2015-01-30 1 views
1

와 드롭 다운 박스에서, 나는 옵션의 텍스트를 얻으려면 다음을 사용할 수 있습니다 알고 mySelect 페이지에서 <select>입니다그냥 CasperJS를 배우기 시작 옵션 값을 가져 오기에서 CasperJS

var casper = require('casper').create(); 
casper.start('http://www.example.com/test.aspx', function() { 
    this.evaluate(function() { 
    this.echo("Values: " + this.fetchText('#mySelect')); 
    }); 
}); 
casper.run(function() { 
    this.exit(); 
}); 

. 샘플 HTML은 다음과 같다 :

<select id="mySelect"> 
    <option value="1">One</option> 
    <option value="2">Two</option> 
    <option value="3">Three</option> 
</select> 

내 목표는 값 (1, 2, 3) mySelect에서 얻는 것입니다. 어떻게 CasperJS에서 이것을 할 수 있습니까? 나는 다음과 같은 코드를 시도했지만 아무것도까지 보여줍니다 :

this.evaluate(function() { 
    var options = document.getElementById("mySelect").children; 
    for(var i = 0; i < options.length; i++) { 
     this.echo('Options: ' + options[i]); 
    } 
}); 

을 비트 디버깅 후, optionsundefined입니다.

답변

2

casper.evaluate은 기본적으로 PhantomJS 'page.evaluate과 동일합니다 (두 가지를 모두주의 깊게 읽을 수 있도록 연결되어 있습니다). 샌드 박스 페이지 컨텍스트입니다. 외부 변수는 여기에 없으며 thiswindow을 말합니다. 나는이 페이지가 글로벌 기능이 echofetchText인지 의심 스럽다.

DOM 요소는 페이지 컨텍스트에서 전달할 수 없습니다.

var options = this.evaluate(function() { 
    var options = document.getElementById("mySelect").children; 
    return [].map.call(options, function(opt){ 
     return {val: opt.value, text: opt.textContent}; 
    }); 
}); 

하거나

var options = this.getElementsInfo('#mySelect > option'); 
: 당신은 같은 표현을 구축해야합니다
관련 문제