2017-11-23 1 views
0

동일한 xpath 및 동일한 ID/이름을 가진 하나 이상의 요소가 페이지에 있습니다. , 같은 로케이터가있는 페이지에 두 개의 필드가 있습니다. 값을 입력하려고했습니다. 코드 아래에 원하는 위치동일한 xpath를 사용하여 페이지에서 둘 이상의 요소를 처리하는 방법

element.all (by.xpath ('testInstanceScan ")')).) get (1) .sendKeys ('Vkumar');

하지만 오류 메시지가 표시됩니다.

실패 : 인덱스가 벗어납니다. 인덱스 요소를 액세스하려고 1하지만 바이 로케이터 일치 만 1 요소있다 (XPath는이 // * @ ID = "testInstanceScan"] ) 나 '( element.all 사용한 경우

# testInstanceScan ') .get (1) .sendKeys ('Vkumar '); 잘못된 로케이터 스택 : 형식 오류 : 잘못된 로케이터

XPath는 :

//*[@id="TubeExpirationDate"] 

날이에 제안 해주십시오

내가 오류

실패

에 직면했다.

+0

시도해 본 코드와 관련 html을 게시하십시오. – HaC

+0

var expDate = browser.findElement (by.xpath ('// * [@ id = "TubeExpirationDate"]')); expDate.clear(); expDate.sendKeys ('11252017'); browser.driver.수면 (4000); 거기에 날짜를 입력하려고하는데 동일한 xpath ('* * [@ id = "TubeExpirationDate"]')로 3 개의 datefiled가 있습니다. –

+0

모든 요소에 동일한 값을 입력 하시겠습니까? 또한 위의 코드를 포함하여 답변을 편집하여 응답하면 더 쉽게 읽을 수 있습니다. – HaC

답변

0

post과 비슷한 element.all(locator).each(eachFunction)을 사용해야합니다. element.all()은 공통 로케이터로 식별 된 요소의 List를 리턴합니다. 그런 다음 .each()이 해당 목록을 반복합니다. function(element, index).each()으로 전달되면 각 요소와 해당 색인에 액세스 할 수 있습니다. 다른 사람에 의해 제안

element.all(by.id('TubeExpirationDate')).each(function(element, index) { 
    element.clear(); 
    var date = index + 3; 
    element.sendKeys('11' + date + '2017'); 
}); 

protractortest.org 검토 할 시간이 걸릴 수있는 좋은 자원이다.

+0

안녕하세요 내가 요소를 시도하지만 내 응용 프로그램이 시작되지 않습니다 아래 코드는 내가 무엇입니까 count(); i ++) { element.all ('// * [@ *]])에 대해 을 사용하여 (var i = 1; element.all @ id = "TubeExpirationDate"] '). get (i) .clear; element.all ('// * [@ id = "TubeExpirationDate"]'). get (i) .sendKeys ('11252017'); browser.driver.sleep (2000); } 이하 : 튜브 로트 특급. 날짜 : [................] [................] [......... .......] 스크린 샷을 첨부 할 수 없어서 원하는 필드를 표시하려고 시도했습니다. –

+0

내 대답을보다 명확하게 편집하고 sendKey 값을 수정하는 행을 추가했습니다. – HaC

0

돌출 코드 API 페이지에서 cssContainingText()과 같은 내용을 확인하십시오. element.all()filter() 또는 each()

(작동하지 않는) 코드를 개선하기 위해 :

let j = 0; 
let entries = ['july', 'august', 'september', 'restOfYear']; 
$$('#TubeExpirationDate').each(function(elem){ 
    elem.clear().sendKeys('11'+entries[j]+'2017'); 
    j++; 
    //browser.sleep(2000); //I suggest not to use browser.sleep at all 
}) 

그러나 더 좋은 것은 명확하게 원하는 정확한 객체를 식별하는 것입니다 : 예를 들어이의

for (var i=1;element.all(by.xpath('//*[@id="TubeExpirationDate"]')).c‌​ount();i++){ 
    element.all('//*[@id="TubeExpirationDate"]').get(i).clear; 
    element.all('//*[@id="TubeExpirationDate"]').get(i).sendKeys‌​('11252017'); 
    browser.driver.sleep(2000); 
} 

시도 독특한 신분 확인을 위해 using CSS Selectors 님의 의견을 보내주십시오. 예를 들면 : 나는 이미 제안

let elemGroup = $$('#TubeExpirationDate'); 
elemGroup.$('div[indiv-index ="0"]').clear().sendKeys('11-01-2017'); 
elemGroup.$('div[indiv-index ="1"]').clear().sendKeys('11-02-2017'); 
//or if you want to use a counter-variable 
elemGroup.$('div[indiv-index ="'+j+'"]').clear().sendKeys('11'+entries[j]+'2017'); 

그러나, 너무 많은 좋은 설명과 예제가 제공됩니다 ... Protractortest.org에 일부 연구를.

+0

@ Ernst Zwingli 감사합니다. 제안, 위의 코드를 사용하여 각 요소에 값을 입력 할 수 있지만, 작동하지 않는 코드에서 각 요소마다 다른 값을 입력해야합니다. 같은 var j = i + 3 element.all ('// * [@ id = "TubeExpirationDate"]'). get (i) .sendKeys ('11'+ j + '2017'); 비슷한 입력을위한 다른 방법이 있습니다. –

+0

@vijaykumar : 내 대답이 향상되었습니다. 이러한 일에는 로켓 과학이 없기 때문에 protractortest.org를 통해 자신에게 알릴 수있는 기회를 얻으십시오. –

관련 문제