2014-10-16 2 views
2

누군가 나를 자세히 설명 할 수 있습니까? 왜 셀런 webdriverjs의 "일부"작업이 비동기 함수가 돌아 오기를 기다릴 필요가 있고 다른 것들은 그렇지 않은지 설명 할 수 있습니까?셀레늄 webdriverjs에서 완료 될 때까지 기다릴 때 (그리고 없을 때)?

공식 샘플에서 은 driver.findElement을 사용하기 전에 완료되기를 기다리지 않고 있지만 driver.getTitle()이라는 제목을 검색하면 비교하기 전에 약속을 사용합니다.

var webdriver = require('selenium-webdriver'); 

var driver = new webdriver.Builder(). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 

driver.get('http://www.google.com'); 
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver'); 
driver.findElement(webdriver.By.name('btnG')).click(); 
driver.wait(function() { 
return driver.getTitle().then(function(title) { 
    return title === 'webdriver - Google Search'; 
}); 
}, 1000); 

driver.quit(); 

답변

3

설명서에는 Control Flows 섹션의 상황이 설명되어 있습니다.

당신이 직접 처리 할 필요가 없을 때조차도 모든 약속입니다. WebDriverJS에 특별히 지정하지 않으면 지시를 처리하는 약속 관리자가있어서 많은 경우 경우 약속이 처리됩니다. 설명서에이 예제가 나와 있습니다. 이 지침을 줄 경우

driver.get(“http://www.google.com”). 
then(function() { 
    return driver.findElement(webdriver.By.name('q')); 
}). 
then(function(q) { 
    return q.sendKeys('webdriver'); 
}). 
then(function() { 
    return driver.findElement(webdriver.By.name('btnG')); 
}). 
then(function(btnG) { 
    return btnG.click(); 
}). 
then(function() { 
    return driver.getTitle(); 
}). 
then(function(title) { 
    console.log(title); 
}); 

당신이 getTitle에 의해 반환 약속을 처리해야하는 이유 console.log는 WebDriverJS 기능이되지 않는 것입니다 때문에 수행합니다

driver.get(“http://www.google.com”); 
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver'); 
driver.findElement(webdriver.By.name('btnG')).click(); 
driver.getTitle().then(function(title) { 
    console.log(title); 
}); 

약속 매니저는이처럼 엮어 약속 관리에 참여하지 마십시오.

+0

감사합니다.이 대답은 나를 많이 도왔습니다! –

관련 문제