2017-03-04 4 views
2

nightwatch.js로 웹 응용 프로그램을 테스트하는 데 문제가 있습니다. 이전에 추가 한 모든 하위 요소가 포함 된 페이지가 있는지 확인하려면 페이지의 모든 div 요소를 반복해야합니다. 예를 들면 :div 중 하나에 내 값이 포함되어 있는지 확인

<div className = 'myclass'> 
    <h2> text1 </h2> 
    <h3> second_text1 </h3> 
</div> 
<div className = 'myclass'> 
    <h2> text2 </h2> 
    <h3> second_text2 </h3> 
</div> 

divs 중 하나에 'text2'와 'second_text2'가 모두 포함되어 있는지 확인하고 싶습니다. 내가 여기 iter 함수를 추가하려고 : Assert text value of list of webelements using nightwatch.js하지만 div의 아무도 내 값을 포함하는 경우에만이 div 및 어설 션에서 자식 요소를 확인하는 방법을 모르겠다.

답변

2

아쉽게도 nightwatch는 약속이나 일반적인 비동기를 잘 지원하지 않습니다. 블로그 게시물 here에는 몇 가지 문제점이 요약되어 있습니다.

다행히도 browser.elementsbrowser.perform의 조합을 사용하는 것이 가능합니다.

var assert = require('assert'); 

module.exports = { 
    'foobar': function (browser) { 
     var isTextFound = false; 
     browser 
      .url('http://localhost:3000') 
      .waitForElementVisible('body', 1000); 

     browser.elements('css selector', '.myclass', function (res) { 
      res.value.forEach(function (jsonWebElement) { 
       var jsonWebElementId = jsonWebElement.ELEMENT; 
       browser.elementIdText(jsonWebElementId, function (jsonElement) { 
        var text = jsonElement.value; 
        if (text.indexOf('text1') !== -1 && text.indexOf('second_text') !== -1) { 
         isTextFound = true; 
        } 
       }); 
      }); 
     }); 
     browser.perform(function() { 
      assert.ok(isTextFound, 'Text found'); 
     }); 


     browser.end(); 
    } 
} 

는 nightwatch는 DOM 요소에서 작동 어썰트 따라서 당신은 부울을 주장 할 수 없기 때문에 필요의 키 포인트

require('assert')

이 중 일부를 통해 가자. 이것은 또한 어설 션이 보고서에 나타나지 않을 것이라는 것을 의미합니다. 그러나 이것이 틀리면 오류가 발생하고 이것이 발생합니다. 주장은 이후에 일어날 수 있도록

browser.perform(function(){...})

이 명령 큐에 주장을 넣습니다. 이것이 없으면 즉시 평가가 수행되고 어설 션은 실패합니다.

browser.elements('css selector, '.myclass', function(res){...})

elements api을 사용하고 있습니다. webdriver 프로토콜 섹션의 API는 웹 요소를 직접 반환하지 않지만 웹 요소 (WebElement JSON 개체)의 Serenium 표현을 반환하므로 elementIdText과 같은 특수 메서드를 사용하여 정보를 가져와야합니다.