2014-12-02 1 views
1

내 경우에는 페이지가로드 될 때를 알 수있는 유일한 방법은 2 개의 선택기를 기다리는 것입니다.CasperJS로 2 셀렉터를 대기하는 방법은 무엇입니까?

CasperJS를 사용하여 가장 좋은 방법은 무엇입니까? 나는 기능이 this를 반환 실제로 this를 사용하여 체인에 사용할 수 있도록 몇 가지 개선을 제안 쉽게 내의 다른 casper 인스턴스에이 기능을 추가 할 수 있도록

casper.waitUntilVisible2 = function(selector1, selector2, then, onTimeout, timeout) { 
    casper.waitUntilVisible(selector1, function() { 
    casper.waitUntilVisible(selector2, then, onTimeout, timeout) 
    }, onTimeout, timeout); 
} 

답변

0

: 여기

내 솔루션입니다 하나의 스크립트. 그렇지 않으면 괜찮습니다.

casper.waitUntilVisible2 = function(selector1, selector2, then, onTimeout, timeout) { 
    this.waitUntilVisible(selector1, function() { 
    this.waitUntilVisible(selector2, then, onTimeout, timeout) 
    }, onTimeout, timeout); 
    return this; 
} 

시도 할 수있는 것은 두 번째 선택기 만 사용하는 것입니다.

casper.waitUntilReappears = function(selector, then, onTimeout, timeout) { 
    this.waitWhileVisible(selector, function() { 
    this.waitUntilVisible(selector, then, onTimeout, timeout) 
    }, onTimeout, timeout); 
    return this; 
} 

선택기가 20ms보다 빠르게 변경되면 실패 할 수도 있지만.

+0

두 번째 선택기가 이전 페이지에 이미 있기 때문에 작동하지 않습니다. 따라서 첫 번째 선택기를 기다려야하므로 두 번째 선택기가 비동기 적으로로드 될 때까지 기다려야합니다. –

+0

나는 그 사건에 대해 생각하지 않았습니다. 나는 대답을 바꿨다. 그래서, 그것이 당신을 위해 일한다면, 이것을하는 가장 짧은 기능입니다. –

+0

그건 그렇고, 실제 페이지로드가 있습니까 아니면이 단일 페이지 응용 프로그램입니까? 실제 페이지로드가 있으면'then'과'waitUntilVisible (selector2)'를 조합하여 사용할 수 있습니다. 특정 유즈 케이스가 무엇인지 설명 할 필요가 있다고 생각합니다. 그 경우 무엇이 최선인지를 추측하고 관심을 잃을 것입니다. –