[javascript] 드롭 다운 protractorjs e2e 테스트에서 옵션을 선택하는 방법

각도기를 사용하여 각도 e2e 테스트를 위해 드롭 다운에서 옵션을 선택하려고합니다.

다음은 선택 옵션의 코드 스 니펫입니다.

<select id="locregion" class="create_select ng-pristine ng-invalid ng-invalid-required" required="" ng-disabled="organization.id !== undefined" ng-options="o.id as o.name for o in organizations" ng-model="organization.parent_id">
    <option value="?" selected="selected"></option>
    <option value="0">Ranjans Mobile Testing</option>
    <option value="1">BeaverBox Testing</option>
    <option value="2">BadgerBox</option>
    <option value="3">CritterCase</option>
    <option value="4">BoxLox</option>
    <option value="5">BooBoBum</option>
</select>

나는 시도했다 :

ptor.findElement(protractor.By.css('select option:1')).click();

이로 인해 다음과 같은 오류가 발생합니다.

유효하지 않거나 잘못된 문자열이 지정되었습니다. 빌드 정보 : 버전 : ‘2.35.0’, 개정 : ‘c916b9d’, 시간 : ‘2013-08-12 15:42:01’시스템 정보 : os.name : ‘Mac OS X’ , os.arch : ‘x86_64’, os.version : ’10 .9 ‘, java.version :’1.6.0_65 ‘드라이버 정보 : driver.version : 알 수 없음

나는 또한 시도했다 :

ptor.findElement(protractor.By.xpath('/html/body/div[2]/div/div[4]/div/div/div/div[3]/ng-include/div/div[2]/div/div/organization-form/form/div[2]/select/option[3]')).click();

이로 인해 다음과 같은 오류가 발생합니다.

ElementNotVisibleError : 요소가 현재 표시되지 않으므로 명령 지속 시간 또는 시간 제한과 상호 작용하지 않을 수 있습니다. 9 밀리 초 빌드 정보 : 버전 : ‘2.35.0’, 수정 : ‘c916b9d’, 시간 : ‘2013-08-12 15:42 : 01 ‘시스템 정보 : os.name :’Mac OS X ‘, os.arch :’x86_64 ‘, os.version : ’10 .9’, java.version : ‘1.6.0_65’세션 ID : bdeb8088-d8ad-0f49-aad9 -82201c45c63f 드라이버 정보 : org.openqa.selenium.firefox.FirefoxDriver 기능 [{platform = MAC, acceptSslCerts = true, javascriptEnabled = true, browserName = firefox, rotatable = false, locationContextEnabled = true, version = 24.0, cssSelectorsEnabled = true, databaseEnabled = true, handlesAlerts = true, browserConnectionEnabled = true, nativeEvents = false, webStorageEnabled = true, applicationCacheEnabled = false, takesScreenshot = true}]

누구 든지이 문제로 나를 도와 주거나 내가 여기서 잘못하고있는 일에 대해 약간의 빛을 던질 수 있습니까?



답변

비슷한 문제가 있었고 결국 드롭 다운 값을 선택하는 도우미 함수를 작성했습니다.

나는 결국 옵션 번호로 잘 선택하기로 결정했기 때문에 요소와 optionNumber를 취하고 해당 optionNumber를 선택하는 메소드를 작성했습니다. optionNumber가 null이면 아무 것도 선택하지 않습니다 (드롭 다운을 선택하지 않은 상태로 둡니다).

var selectDropdownbyNum = function ( element, optionNum ) {
  if (optionNum){
    var options = element.all(by.tagName('option'))
      .then(function(options){
        options[optionNum].click();
      });
  }
};

자세한 내용을 원하시면 블로그 게시물을 작성했으며 드롭 다운에서 선택한 옵션의 텍스트를 확인하는 방법도 다룹니다. http://technpol.wordpress.com/2013/12/01/protractor-and-dropdowns-validation/


답변

나를 위해 매력처럼 일 했어

element(by.cssContainingText('option', 'BeaverBox Testing')).click();

도움이 되었기를 바랍니다.


답변

우아한 접근 방식 은 다른 셀레늄 언어 바인딩이 즉시 제공하는 것과 유사한 추상화를 만드는 것입니다 (예 : SelectPython 또는 Java의 클래스).

의는 만들어 보자 편리한 래퍼 내부와 숨기기 구현 세부 사항 :

var SelectWrapper = function(selector) {
    this.webElement = element(selector);
};
SelectWrapper.prototype.getOptions = function() {
    return this.webElement.all(by.tagName('option'));
};
SelectWrapper.prototype.getSelectedOptions = function() {
    return this.webElement.all(by.css('option[selected="selected"]'));
};
SelectWrapper.prototype.selectByValue = function(value) {
    return this.webElement.all(by.css('option[value="' + value + '"]')).click();
};
SelectWrapper.prototype.selectByPartialText = function(text) {
    return this.webElement.all(by.cssContainingText('option', text)).click();
};
SelectWrapper.prototype.selectByText = function(text) {
    return this.webElement.all(by.xpath('option[.="' + text + '"]')).click();
};

module.exports = SelectWrapper;

사용 예 (가독성과 사용이 얼마나 쉬운 지 참고) :

var SelectWrapper  = require('select-wrapper');
var mySelect = new SelectWrapper(by.id('locregion'));

# select an option by value
mySelect.selectByValue('4');

# select by visible text
mySelect.selectByText('BoxLox');

다음 주제에서 가져온 솔루션 : 선택-> 옵션 추상화 .


참고로, 기능 요청 생성 : 선택-> 옵션 추상화 .


답변

element(by.model('parent_id')).sendKeys('BKN01');


답변

특정 옵션에 액세스하려면 nth-child () 선택기를 제공해야합니다.

ptor.findElement(protractor.By.css('select option:nth-child(1)')).click();


답변

이것이 내가 선택한 방법입니다.

function switchType(typeName) {
     $('.dropdown').element(By.cssContainingText('option', typeName)).click();
};


답변

내가 한 방법은 다음과 같습니다.

$('select').click();
$('select option=["' + optionInputFromFunction + '"]').click();
// This looks useless but it slows down the click event
// long enough to register a change in Angular.
browser.actions().mouseDown().mouseUp().perform();