XPath์— ๋Œ€ํ•˜์—ฌ

2025. 2. 27. 19:38ยท๐Ÿ“‚ Quality Assurance Study/๐Ÿ“„ QA ๊ณต๋ถ€

XPath (์ถœ์ฒ˜: https://velog.io/@hippohami/XPath-%EC%9E%91%EC%84%B1%EB%B2%95)

 

๐Ÿ“Œ 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 ๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Jest + POM] ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง  (0) 2025.04.20
Unity์—์„œ์˜ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋ฐ Jira ์ด์Šˆ ๋“ฑ๋ก ์ž๋™ํ™”  (0) 2025.03.09
Jira REST API ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ ์ด์Šˆ ์กฐํšŒ  (0) 2025.03.02
Jira ๋ฐ Confluence ์‚ฌ์šฉ ๋ฐฉ๋ฒ•  (2) 2025.02.20
BTS (Bug Tracking System)์— ๋Œ€ํ•˜์—ฌ  (3) 2025.01.13
'๐Ÿ“‚ Quality Assurance Study/๐Ÿ“„ QA ๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Unity์—์„œ์˜ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋ฐ Jira ์ด์Šˆ ๋“ฑ๋ก ์ž๋™ํ™”
  • Jira REST API ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ ์ด์Šˆ ์กฐํšŒ
  • Jira ๋ฐ Confluence ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  • BTS (Bug Tracking System)์— ๋Œ€ํ•˜์—ฌ
YeonSu02
YeonSu02
Email : rkddustn2519@naver.com
  • YeonSu02
    IsLiife2
    YeonSu02
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐Ÿ“‚ Computer Science
      • ๐Ÿ“‚ Unity Engine Study
        • ๐Ÿ“„ Unity ์ธํ”„๋Ÿฐ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์œ ํŠœ๋ธŒ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์ฐธ๊ณ 
        • ๐Ÿ’ป Game Development
      • ๐Ÿ“‚ Quality Assurance Study
        • ๐Ÿ”ฅ ์—˜๋ฆฌ์Šค SW QAํŠธ๋ž™
        • ๐Ÿ“„ QA ๊ณต๋ถ€
        • ๐Ÿ“š QA ์ฑ… ๋ฆฌ๋ทฐ
      • ๐Ÿ“‚ Program Language Study
        • ๐Ÿ“„ C# ๊ณต๋ถ€
        • ๐Ÿ“„ ํŒŒ์ด์ฌ ๊ณต๋ถ€
        • ๐Ÿ“„ JavaScript ๊ณต๋ถ€
        • ๐Ÿ“„ TypeScript ๊ณต๋ถ€
      • ๐Ÿ“‚ Additional Study
        • ๐Ÿ“„ Git
        • ๐Ÿ“„ Docker
        • ๐Ÿ“„ Jenkins
        • ๐Ÿ“„ Firebase
        • ๐Ÿ“„ License
      • ๐Ÿ“‚ Experience
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ…Œ์ŠคํŒ…์ž๊ฒฉ์ฆ
    ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ
    qa ์ฑ…
    ์—‘์…€
    ๋ถ€ํŠธ์บ ํ”„ ์ถ”์ฒœ
    qa ๋ถ€ํŠธ์บ ํ”„
    ์ •์ฒ˜๊ธฐ ์‹ค๊ธฐ
    ์ž๊ฒฉ์ฆ
    ์—˜๋ฆฌ์ŠคํŠธ๋ž™ ํ›„๊ธฐ
    istqb-ctfl
    qa์ž๊ฒฉ์ฆ
    qa ์ง๋ฌด ๊ต์œก
    qa ๊ฐ•์˜
    ๊ตญ๋น„๋ถ€ํŠธ์บ ํ”„ ์ถ”์ฒœ
    qa ์ฑ… ๋ฆฌ๋ทฐ
    ์—˜๋ฆฌ์ŠคํŠธ๋ž™
    ์ •์ฒ˜๊ธฐ ํ•„๊ธฐ
    ์ปดํ™œ
    QA
    ์ •์ฒ˜๊ธฐ ๋…ํ•™
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
YeonSu02
XPath์— ๋Œ€ํ•˜์—ฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”