XPATH를 사용하여 다음을 포함하는 텍스트 검색
XPather Browser를 사용하여 HTML 페이지에서 XPATH 표현식을 확인합니다.
제 최종 목표는 셀레늄에서 사용자 인터페이스를 테스트하는 데 이 표현들을 사용하는 것입니다.
다음과 같은 내용의 HTML 파일을 받았습니다.
<tr><td>abc </td><td> /td></tr>
합니다 된 텍스트를 하고 싶습니다
".
와 가 없습니다.한 XPATH합니다.//td[text()="abc"]
.
해 볼 때//td[text()=" "]
아무 것도 돌려주지 않습니다.""까"가이 있습니까?&
" ?
Selenium의 배후에 있는 OpenQA는 이미 이 문제를 해결한 것으로 보입니다.그들은 몇 가지 변수를 공백과 정확히 일치하도록 정의했습니다.제 경우에는 다음과 같은 XPATH를 사용해야 합니다.//td[text()="${nbsp}"]
.
오픈의 텍스트를 여기서 재현했습니다.이 문제와 관련된 QA(여기에서 확인 가능):
HTML은 요소 내의 공백을 자동으로 정규화하여 선행/후행 공백을 무시하고 여분의 공백, 탭 및 새 줄을 단일 공백으로 변환합니다.셀레늄은 페이지 밖으로 텍스트를 읽을 때 이 동작을 복제하려고 시도하므로 HTML의 모든 탭과 새 줄을 무시하고 렌더링 시 텍스트가 브라우저에서 어떻게 보이는지에 따라 주장을 수행할 수 있습니다.은 눈에 않는 모든 빈백함)합니다" 으로써 수행됩니다.
한 으로.") 으로합니다. 눈에 새 선선()<br>
,<p>
,그리고.<pre>
형식화된 새 줄)을 보존해야 합니다.HTML Selenese test case table의 텍스트에 동일한 정규화 로직을 사용합니다.이것은 많은 장점을 가지고 있습니다.를 볼 가 없습니다째, HTML다를의하세요;"
를 작성할 에 대해 걱정하지 됩니다라고 셀레네즈 요"을.
" 검사 케이스에 표시된 마커를 사용하여 주장할 수 있습니다.을(를) 하는 필드
도 있습니다.") 셀레네어에 줄과 여백을 추가할 수도 있습니다.<td>
할 수 s;다.따라서 테스트 케이스에 공백을 추가로 삽입해야 하는 드문 경우에 약간의 문제가 발생합니다.를 들어 어,다"와해야 할
foo
". 하지만 당신이 단순히 글을 쓴다면,<td>foo </td>
셀레네 테스트 케이스에서는 여분의 공간을 하나의 공간으로 교체해 드립니다.이 문제는 간단한 해결 방법을 가지고 있습니다.데에서
${space}
입니다.합니다.${space}
오.<td>foo${space}${space}${space}</td>
했습니다이라는${nbsp}
않는 하는 데 할 수 있습니다.XPath는 우리가 하는 것처럼 공백을 정규화하지 않습니다.XPath를 작성해야 한다면 다음과 같습니다.
//div[text()="hello world"]
의 HTML말"입니다.hello world
", 당신은 진짜를 삽입해야 할 것입니다.
시키는 것처럼 "셀레네 합니다.//div[text()="hello${nbsp}world"]
.
두 따옴표 사이에 Windows에서 Alt+0160을 입력하면 하드 코딩된 깨지지 않는 공간(U+00A0)을 입력할 수 있습니다.
//table[@id='TableID']//td[text()=' ']
그 특별한 차로 나를 위해 일했습니다.
XPath 1.0 표준은 탈출 유니코드 문자를 처리하지 않는 것으로 알고 있습니다.XPath 2.0에 그것에 대한 기능이 있는 것 같지만 Firefox가 그것을 지원하지 않는 것 같습니다(혹은 제가 뭔가 잘못 이해했습니다).그래서 당신은 지역 코드 페이지와 관련이 있습니다.못생겼다는 거 알아요.
사실 표준은 정확한 유니코드 탈출 순서를 제공하기 위해 XPath를 사용하는 프로그래밍 언어에 의존하고 있는 것 같습니다.그래서, 어떻게든, 옳은 일을 한 겁니다.
제공하신 HTML에 따라:
<tr>
<td>abc</td>
<td> </td>
</tr>
문자열로 노드를 찾으려면 다음 xpath 기반 솔루션 중 하나를 사용할 수 있습니다.
으로.
text()
:"//td[text()='\u00A0']"
으로.
contains()
:"//td[contains(., '\u00A0')]"
그러나 이상적으로 NO-BREAK SPACE 문자를 피하고 다음 로케이터 전략 중 하나를 사용하는 것이 좋습니다.
항목 하기
<tr>
efollowing-sibling
:"//tr//following-sibling::td[2]"
으로.
starts-with()
:"//tr//td[last()]"
에서 설명한 을 사용합니다.
<td>
efollowing
node and
': -':"//td[text()='abc']//following::td[1]"
언급
관련 자세한 내용은 다음에서 확인할 수 있습니다.
tl; dr
유니코드 문자 'NO-BREAK SPACE' (U+00A0)
를(를) 사용해 보십시오. 
이름있는 개체 대신에만약 그것이 작동하지 않는다면, 당신은 유니코드 문자를 단지 깨지지 않는 공간에 사용할 수 있어야 합니다.
독립체.
(참고: XPather에서는 시도하지 않았지만, Oxygen에서는 시도했습니다.)
는 XML의 참조(을 들어 XML 의 XML 입니다 5는)를 엔티티 .&
,>
,<
,'
,"
XPath 식을 평가하는 시간까지 대상 인코딩에서 해당 문자를 사용합니다.이러한 동작을 고려할 때 XML 도구를 사용하고자 한다면 PhiLho와 jsulak의 제안이 최선의 방법입니다.. 
XPath 식에서 XPath 식을 적용하기 전에 해당 바이트 시퀀스로 변환해야 합니다.
Xpather를 사용하여 일치하는 파일을 얻을 수는 없지만 Microsoft의 XML 메모장에 있는 일반 XML 및 XSL 파일에서는 다음과 같은 작업이 가능했습니다.
<xsl:value-of select="count(//td[text()=' '])" />
반환된 값은 1로 제 테스트 케이스의 정확한 값입니다.
그러나 다음을 사용하여 nbsp를 XML 및 XSL 내의 엔티티로 선언해야 했습니다.
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
그게 도움이 될지는 모르겠지만 실제로 XPath 식을 사용하여 nbsp를 찾을 수 있었습니다.
편집: 내 코드 샘플에는 실제로 ' ' 문자가 포함되어 있지만, 자바스크립트 구문 하이라이트를 통해 공백 문자로 변환됩니다.오해하지 마!
:
ynbsp
-요?
언급URL : https://stackoverflow.com/questions/247135/using-xpath-to-search-text-containing-nbsp
'prosource' 카테고리의 다른 글
SQL Developer를 사용하여 Oracle .dmp 파일 가져오기 (0) | 2023.09.25 |
---|---|
SQL에서 REFUSE 대 INSERT (0) | 2023.09.25 |
UI 레이블의 배경색을 애니메이션화하는 방법은? (0) | 2023.09.25 |
AJAX / Jquery XML 구문 분석 (0) | 2023.09.25 |
Oracle에서 삭제 문이 매우 느렸습니다. (0) | 2023.09.25 |