๐ XPath(XML Path Language)๋?
XPath๋ XML ๋ฌธ์์์ ํน์ ์์๋ ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ์ธ์ด๋ก, W3C ํ์ค์ด๋ค. ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , ํน์ ๊ตฌ๋ฌธ์ ํ์ฉํ์ฌ ์์๋ฅผ ์ฐพ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ๊ณตํ๋ค. ์๋๋ XML ๋ฌธ์ ๋ด์ ํญ๋ชฉ์ ๋ฐฐ์นํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ง๋ง, ์ ๋ฐ์ ์ผ๋ก ๋งํฌ์ ์ธ์ด(Markup Language)๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ HTML๊ณผ ๊ฐ์ ๋งํฌ์ ์ธ์ด์์๋ ํ์ฉํ ์ ์๋ค.
+ ์ถ๊ฐ ์ง์
Markup Language
~> ๋ฌธ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ํ์ํ๋ ์ธ์ด (์: HTML, XML ๋ฑ)
~> ํน์ง
• ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ์ ์
• ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ํํํ๋ ์ฉ๋๋ก ์ฌ์ฉ
• ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํด๋นํ์ง ์์
XML(eXtensible Markup Language)
~> ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋งํฌ์ ์ธ์ด
~> HTML๊ณผ ๋น์ทํ ํ๊ทธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๊ฒ์ด ์ฃผ๋ชฉ์ (HTML์ ์น ํ์ด์ง๋ฅผ ํ์ํ๋ ๊ฒ์ด ์ฃผ๋ชฉ์ )
๐ HTML ๊ณ์ธต ๊ตฌ์กฐ
HTML์ ๋ฌธ์๋ฅผ ๊ตฌ์กฐํํ๋ ๋งํฌ์ ์ธ์ด๋ก, ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ธต์ ์ผ๋ก ์์๋ค์ด ๋ฐฐ์น๋๋ค. ๋ฐ๋ผ์ HTML ๋ฌธ์๋ ๋ถ๋ชจ ์์์ ์์ ์์๊ฐ์ ๊ณ์ธต์ ์ธ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ชจ๋ HTML ์์๋ DOM(Document Object Model) ํธ๋ฆฌ๋ฅผ ํ์ฑํ๋ค.
๋ฐ๋ผ์ ์๋์ HTML ์ฝ๋๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Document</h1>
<div>
<p id="ch1" class="text">Lorem, ipsum dolor sit amet consectetur adipisicing elit.</p>
<p id="ch2" class="text">Vitae quo natus veniam quia mollitia dignissimos odio sunt ut ex, in quas ipsa iusto.</p>
</div>
</body>
</html>
์๋์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํํ ์ ์๋ค.
HTML ๋ฌธ์๋ ์์ ๊ฐ์ด ๊ณ์ธต์ ์ธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์์๋ ๋ถ๋ชจ, ์์, ํ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค. XPath๋ ์ด๋ฌํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ๋์ํ๋ฏ๋ก, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด HTML ๋ฌธ์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ด๋ค.
๐ XPath ๊ธฐ๋ณธ ๋ฌธ๋ฒ
1๏ธโฃ ์ฃผ์ ๊ธฐํธ
๊ธฐํธ | ์๋ฏธ | ์์ | ์ค๋ช |
/ | ์ ๋ ๊ฒฝ๋ก | /html/body/div | ๋ฌธ์์ ๋ฃจํธ๋ถํฐ ํ์ |
// | ์๋ ๊ฒฝ๋ก | //p | ๋ฌธ์ ์ ์ฒด์์ ๋ชจ๋ <p> ์์ ์ฐพ๊ธฐ |
. | ํ์ฌ ์์ | ./p | ํ์ฌ ์์ ๋ด์ <p> ์ฐพ๊ธฐ |
.. | ๋ถ๋ชจ ์์ | //p/.. | <p> ์์์ ๋ถ๋ชจ ์์ ์ ํ |
@ | ์์ฑ ์ ํ | //p[@class='text'] | class๊ฐ 'text'์ธ <p> ์ฐพ๊ธฐ |
* | ๋ชจ๋ ์์ ์ ํ | //div/* | <div> ๋ด๋ถ์ ๋ชจ๋ ์์ ์ ํ |
2๏ธโฃ ์กฐ๊ฑด ๋ฐ ์ฐ์ฐ์
์ฐ์ฐ์ | ์๋ฏธ | ์์ | ์ค๋ช |
[] | ์กฐ๊ฑด | //p[@id='ch1'] | id๊ฐ 'ch1'์ธ <p> ์ ํ |
and | AND ์กฐ๊ฑด | //p[@id='ch1' and @class='text'] | id๊ฐ 'ch1'์ด๊ณ class๊ฐ 'text'์ธ <p> ์ ํ |
or | OR ์กฐ๊ฑด | //p[@id='ch1' or @id='ch2'] | id๊ฐ 'ch1' ๋๋ 'ch2'์ธ <p> ์ ํ |
= | ๊ฐ ๋น๊ต | //a[@href='/home'] | href๊ฐ '/home'์ธ <a> ์ ํ |
!= | ๊ฐ ๋ถ์ผ์น | //input[@type!='text'] | type์ด 'text'๊ฐ ์๋ <input> ์ ํ |
< | ์์ ๊ฐ | //price[. < 100] | ๊ฐ์ด 100๋ณด๋ค ์์ <price> ์ ํ |
> | ํฐ ๊ฐ | //price[. > 50] | ๊ฐ์ด 50๋ณด๋ค ํฐ <price> ์ ํ |
3๏ธโฃ ํจ์
ํจ์ | ์๋ฏธ | ์์ | ์ค๋ช |
text() | ํ ์คํธ ๊ฐ ์ ํ | //p[text()='Hello'] | 'Hello'์ธ <p> ์ ํ |
contains() | ํน์ ๋ฌธ์์ด ํฌํจ | //p[contains(text(), 'Lorem')] | 'Lorem'์ด ํฌํจ๋ <p> ์ ํ |
starts-with() | ํน์ ๋ฌธ์์ด๋ก ์์ | //p[starts-with(text(), 'Hello')] | 'Hello"๋ก ์์ํ๋ <p> ์ ํ |
last() | ๋ง์ง๋ง ์์ ์ ํ | //p[last()] | ๋ฌธ์ ๋ด ๋ง์ง๋ง <p> ์ ํ |
position() | ํน์ ์์น ์์ ์ ํ | //li[position()=2] | ๋ ๋ฒ์งธ <li> ์ ํ |
๐ ๋ค์ํ ๋ฐฉ์์ XPath
1๏ธโฃ ์ ๋ ๊ฒฝ๋ก ๋ฐฉ์ (Absolute XPath)
/html/head/meta[1] # ์ฒซ ๋ฒ์งธ <meta>
/html/head/meta[2] # ๋ ๋ฒ์งธ <meta>
/html/head/title # <title>
/html/body/h1 # <h1>
/html/body/div # <div>
/html/body/div/p[1] # ์ฒซ ๋ฒ์งธ <p> (id="ch1")
/html/body/div/p[2] # ๋ ๋ฒ์งธ <p> (id="ch2")
2๏ธโฃ ์๋ ๊ฒฝ๋ก ๋ฐฉ์ (Relative XPath)
//meta # ๋ชจ๋ <meta> ์์ ์ ํ
//p # ๋ชจ๋ <p> ์์ ์ ํ
//div/p # <div> ๋ด๋ถ์ <p> ํ๊ทธ๋ค ์ ํ
//head/* # <head> ๋ด๋ถ์ ๋ชจ๋ ์์ ์์ ์ ํ (meta, title ํฌํจ)
//body//p # <body> ๋ด๋ถ์ ๋ชจ๋ <p> ์์ ์ ํ
3๏ธโฃ ์์ฑ ๊ธฐ๋ฐ ์ ํ (Attributes in XPath)
/html/body/div/p[@id='ch1'] # id๊ฐ 'ch1'์ธ <p> ํ๊ทธ ์ ํ
//p[@id='ch2'] # id๊ฐ 'ch2'์ธ <p> ํ๊ทธ ์ ํ
/html/body/div/p[@class='text'] # class๊ฐ 'text'์ธ ๋ชจ๋ <p> ํ๊ทธ ์ ํ
//p[@id='ch1' and @class='text'] # id๊ฐ 'ch1'์ด๊ณ class๊ฐ 'text'์ธ <p> ํ๊ทธ ์ ํ
4๏ธโฃ ํ ์คํธ ๊ธฐ๋ฐ ์ ํ (Text in XPath)
//p[text()='Lorem, ipsum dolor sit amet consectetur adipisicing elit.'] # ์ ํํ ํ
์คํธ๋ฅผ ํฌํจํ <p> ํ๊ทธ ์ ํ
/html/body/div/p[contains(text(), 'Lorem')] # 'Lorem'์ ํฌํจํ๋ ํ๊ทธ ์ ํ
//p[starts-with(text(), 'Vitae')] # 'Vitae'๋ก ์์ํ๋ ํ๊ทธ ์ ํ
+ ์ถ์ฒ
https://hahahax5.tistory.com/2
'๐ Quality Assurance Study > ๐ QA ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ํ #1] Unity์์์ ํ ์คํธ ์๋ํ ๋ฐ Jira ์ด์ ๋ฑ๋ก ์๋ํ (0) | 2025.03.09 |
---|---|
[๋๊ตฌ #2] Jira REST API ํ ํฐ ๋ฐ๊ธ ๋ฐ ์ด์ ์กฐํ (0) | 2025.03.02 |
[๋๊ตฌ #1] Jira ๋ฐ Confluence ์ฌ์ฉ ๋ฐฉ๋ฒ (2) | 2025.02.20 |
[์ฉ์ด #1] BTS (Bug Tracking System)์ ๋ํ์ฌ (3) | 2025.01.13 |