2013-07-06 2 views
8

Ok 그래서 두 개의 드롭 다운 목록이 있습니다. 목록 B은 Ajax 기술을 사용하여 목록 A에서 선택한 것을 기반으로 채워집니다. Selenium에서 드롭 다운 목록을 채우는 작업중인 Ajax 호출을 기다리는 방법

이제 문제는 내가 옵션 양식을 목록을 선택하면, 나는 아약스로드 시간이 많이 걸리는로 채워 목록 B을 볼 수 아니다는 것이다. 이 시나리오에서 Wait 조건을 사용하여 Ajax에 충분한 시간을주는 방법을 알고 싶다. 나는 초심자이므로 내 질문이 어리 석다면 미안하다. 그러나 나는 오랫동안 이것을 정말로 붙들고있다.

내가 사용할 수 없습니다

WebDriverWait wait = new WebDriverWait(driver,30); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id/xpath))); 

을 아이디, xpath 등이 목록이 채워지지 않은 경우에도 항상 동일하게 유지하기 때문이다.

+0

하위 카테고리 선택 – mohit

답변

8

두 가지 접근 방식 중 하나가 옵션 Item x을 기다리는 반면, 다른 방법은 옵션 개수가 다음보다 많을 때까지 기다리는 중입니다. 하나.

그래서 다음과 시도 (테스트되지 않은 자바 코드를, 그래서 당신은 약간의 디버깅해야 할 수도 있습니다) :

당신이 원하는 하나의 옵션에 대한 대기 (하나의 값이나 텍스트 별) :

By byValue = By.cssSelector("#alertSubCatSelectBox > option[value='18222216517']"); 
//By byText = By.xpath("//select[@id='alertSubCatSelectBox']/option[text()='Item x']"); 
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(byValue)); 

또는 (완전하지 않은 아약스 전화를 확인하기 위해 jQuery를 사용하여 더 이상의

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(new ExpectedCondition<Boolean>() { 
    public Boolean hasMoreThanOneOptions(WebDriver driver) { 
     return driver.findElements(By.cssSelector("#alertSubCatSelectBox option")).size() > 1; 
    } 
}); 
+0

By.xpath ("// select [@ id = 'alertSubCatSelectBox']/옵션 [텍스트() = '항목 x']"); 완벽하게 일했습니다. 엄청 고마워. :) – mohit

1

populatesubcategory fn에 대한 onchange 이벤트 호출이 있습니다. 이 fn shud는 두 번째 목록로드를 수행 중입니다. 해당 기능에 대한 코드를 게시 할 수 있습니까? 대답은 대기열을 기반으로 수행 할 수 있습니다.

+0

수 있습니다. 그 함수에 대한 코드를 찾지 못했지만, 당신이 말한 것을 이해했습니다 .List B가 값을 잡을 수있는 onchange 함수도 있습니다. 단지 코드를 게시 할뿐입니다. 도움이 될 수 있다고 생각합니다. . – mohit

+0