2012-04-27 5 views
8

Selenium을 사용하여 웹 페이지에 대한 JUnit 테스트를 작성 중이며 페이지 내에 예상 텍스트가 존재하는지 확인하려고합니다.Selenium : Java에서 cssSelector를 사용하여 div의 텍스트를 추출하십시오.

<div id="recipient_div_3" class="label_spacer"> 
    <label class="nodisplay" for="Recipient_nickname"> recipient field: reqd info </label> 
    <span id="Recipient_nickname_div_2" class="required-field"> *</span> 
    Recipient: 
</div> 

내가 페이지에 무엇을 기대할 무엇 비교하려는, 그래서 나는() Assert.assertTrue를 사용하려면 : 웹 페이지의 코드는이 같은 모습을 테스트하고 있습니다. 그게 사업부에서 모든 것을, 나는

String element = driver.findElement(By.cssSelector("div[id='recipient_div_3']")).getText().replaceAll("\n", " "); 

을 할 수 얻을 알고 있지만이 돌아갑니다 "REQD 정보 *받는 사람 :"

는 ("받는 사람 그냥 DIV에서 텍스트를 얻을 수있는 방법이 있나요 ") 다른 태그없이 cssSelector를 사용합니까?

답변

4

당신은, CSS를 선택하여이 작업을 수행 할 수는 다른 내용들 ". 당신은하지만,하는 XPath 로케이터로 그 작업을 수행 할 수 XPath 표현식이 단지 IT와 자식에 포함 된 DIV의 직접적인 아이가 아닌 모든 텍스트 인 단일 텍스트 노드를 식별합니다

driver.findElement(By.xpath("//div[@id='recipient_div_3']/text()")).getText() 

그건 노드.

+2

제공하는 XPath를 로케이터는 논리적이고 크롬의 콘솔에서 작동을 사용해야하지만, 셀레늄에서 작동하지 않습니다 또한 알 수 있습니다. 셀렌이 다음 오류를 throw합니다 ... '주어진 selector // div [@ class = 'StdLevel1']/text()가 유효하지 않거나 WebElement를 발생시키지 않습니다. 다음 오류가 발생했습니다 : InvalidSelectorError : xpath 표현식 결과 "// class = 'StdLevel1'/ text() '는 [object text]입니다. 요소 여야합니다. ' – BSchlinker

+0

솔루션이 있습니까? 아니면 div를 잡고 getText() 문자열을 파싱 하시겠습니까? –

+0

제 생각에 Infact 셀렌은 text(), node 등등을 허용합니다. – SIslam

4

한 CSS 로케이터로 가능한지 확실하지 않지만 div에서 텍스트를 가져온 다음 div의 자식 노드에서 텍스트를 가져 와서 빼기를 할 수 있습니다. 그와 비슷한 것 (코드가 확인되지 않음) :

String temp = ""; 
List<WebElement> tempElements = driver.findElements(By.cssSelector("div[id='recipient_div_3'] *")); 
for (WebElement tempElement : tempElements) { 
    temp =+ " " + tempElement.getText(); 
} 
String element = driver.findElement(By.cssSelector("div[id='recipient_div_3']")).getText().replaceAll("\n", " ").replace(temp, ""); 

xpath 사용을 피하려고하는 경우를위한 것입니다. XPath는 그것을 할 수 있습니다 : CSS 선택기 "는 DIV에 있지만 포함 된 텍스트 노드를 표현하는 세밀한 충분한 접근이 없기 때문에

//div[@id='recipient_div_3']/text() 
관련 문제