2014-02-21 5 views
0

커스텀 드롭 다운 메뉴에서 항목을 선택하는 각도기 테스트를 작성하려고했습니다. 유일한 문제는 목록에서 마지막 요소가 아닌 다른 요소를 클릭하려고하면 중단되고 시간 초과된다는 것입니다. click() 메서드 호출을 제거하면 제대로 작동하는 것 같습니다. 이러한 모든 호출은 비동기 적으로 수행되기 때문에 요소를 찾으면 루프를 중지하는 방법도 표시되지 않습니다. 내 코드는 다음과 같습니다요소를 클릭하면 각도기 테스트가 중단됩니다.

this.selectRichSelectOption = function (selector, item) { 

    var selectList = browser.driver.findElement(selector); 
    selectList.click(); 

    var desiredOption = ''; 
    var i = 1; 
    selectList.findElements(protractor.By.tagName('li')) 
     .then(function findMatchingOption(options) { 

      console.log(options); 

      options.some(function (option) { 

       console.log('Option:'); 
       console.log(option); 
       var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]'; 
       console.log(listItemLocator); 
       var element = option.findElement(protractor.By.xpath('//label/div/div[2]/div[2]/span[2]')); 
       console.log('Element:'); 
       console.log(element); 
       i++; 

       element.getText().then(function (value) { 
        console.log('Value: ' + value); 
        console.log('Item:'); 
        console.log(item); 
        if (item === value) { 
         console.log('Found option..'); 
         desiredOption = option; 
         return true; 
        } 
        return false; 
       }); 
      }); 
     }) 
     .then(function clickOption() { 
      console.log('Click option'); 
      console.log(desiredOption); 
      if (desiredOption) { 
       console.log('About to click..'); 
       desiredOption.click(); 
      } 
     }); 
}; 

이 하나의 결과는 더 이상하다 :

var it = null; 
    for(var i = 1; i <= totalNumberOfAccounts; i++) { 
     var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]'; 
     var item = browser.driver.findElement(protractor.By.xpath(listItemLocator)); 
     item.getText().then(function(value) { 
      if(value === accountNumber) { 
       it = item; 
      } 
      console.log(value); 
     }) 
     .then(function clickOption() { 
      console.log('Clicking...'); 
      if (it) { 
       console.log('Clicking desired item'); 
       it.click(); 
       console.log('Clicked..'); 
      } 
     }) 
    } 

가 나는 또한이 방법을 시도했다. 갑자기 getText() 메서드 호출이 빈 문자열을 반환합니다. 하지만 예를 들어 클래스 속성 나는 올바른 값을 다시 얻는다. 텍스트 값은 어디로 갔습니까?

누군가 나를 도울 수 있습니까?

+0

어떤 브라우저에서 테스트 했습니까? 문제를 완전히 이해하지 못합니까? [options with Firefox] 문제 (https://github.com/angular/protractor/issues/480)를 만났습니다. 일반적으로 드롭 다운 목록이있는 항목이 있습니다. – glepretre

+0

크롬에서 테스트를 실행했습니다. 일반적인 드롭 다운은 정상적으로 작동합니다. 우리는 여러개의 div와 ul 태그들로 구성된 사용자 정의 드롭 다운을 사용하고 있습니다. 일반적으로 이것은 xpath를 사용하여 요소에 접근 할 수 있기 때문에 큰 문제는 아닙니다. 정상적인 셀렌 API (webdriver가 아님)를 사용하면 실제로 xpath를 사용하여 요소를 반복함으로써 원하는 것을 얻을 수 있습니다. Selenium Webdriver API를 사용하면 좀 더 복잡해 보입니다. 그들은 비동기 호출 체인을 사용하여 요소를 통해 루프 할 수 있기 때문입니다. – Tranquilized

+0

현재 문제는 내가 옵션을 통해 getText()를 호출하여 텍스트 값을 얻으려고 할 때마다 비어있는 것 같습니다. 그래서 내 비교 드롭 다운에서 선택하려는 요소를 찾을 실패합니다. – Tranquilized

답변

0

페이지로드시 문제가있는 것 같습니다. 선택하면 페이지가 완전히로드되지 않습니다.

browser.sleep (timeInMs)을 사용해보십시오.

관련 문제