don't stop believing

Selenium Locating Elements (python) 본문

Testing Automation/Selenium

Selenium Locating Elements (python)

Tongchun 2017. 11. 7. 13:45

Selenium을 사용하기 위해서는 Web source의 element를 찾아야 합니다.

[http://selenium-python.readthedocs.io/locating-elements.html]


Selenium에서는 web page의 elements를 찾기위해 아래와 같은 method들을 제공합니다.

아래 method들은 HTML의 page source중 가장 첫번째 element를 반환합니다.

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
multiple elements는 아래 method를 사용합니다.
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector


find_element_by_id

id 속성을 가지고 있는 경우 사용합니다. id의 값을 찾아 해당 element를 리턴합니다.

<html>
<body>
	<form id="loginForm">
		<input name="username" type="text" />
		<input name="password" type="password" />
		<input name="continue" type="submit" value="Login" />
	</form>
</body>
</html>

아래와 같이 id를 찾을 수 있습니다.

login_form = driver.find_element_by_id('loginForm')


find_element_by_name

name 속성으로 element를 찾을 수 있습니다. name의 값을 찾아 해당 element를 리턴합니다.

<html>
<body>
	<form id="loginForm">
		<input name="username" type="text" />
		<input name="password" type="password" />
		<input name="continue" type="submit" value="Login" />
	</form>
</body>
</html>

find-element_by_name으로 찾을 수 있습니다.

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')


find_element_by_xpath

XPath는 XML의 노드의 위치를 찾는 언어입니다. HTML도 XML로 실행될수 있습니다. element를 찾기위한 적당한 id와 name 속성이 없을 경우 XPath를 사용할 수 있습니다.

<html>
<body>
	<form id="loginForm">
		<input name="username" type="text" />
		<input name="password" type="password" />
		<input name="continue" type="submit" value="Login" />
		<input name="continue" type="button" value="Clear" />
	</form>
</body>
</html>

아래와 같이 XPath를 사용할 수 있습니다.

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

HTML의 첫번째 form element에 대해 XPath이용해 아래와 같이 찾을 수 있습니다.

username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")

HTML의 첫번째 input element의 name 속성과type을 알고 있을대 아래와 같이 XPath로 찾을 수 있습니다.

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")


find_element_by_link_text

anchor 태그의 링크 텍스트로 element를 찾을 수 있습니다.

<html>
<body>
	<p>Are you sure you want to do this?</p>
	<a href="continue.html">Continue</a>
	<a href="cancel.html">Cancel</a>
</body>
</html>

Continue 링크는 아래와 같이 찾을 수 있습니다.

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')


find_element_by_tag_name

tag name으로 element를 찾을 수 있습니다.

<html>
<body>
	<h1>Welcome</h1>
	<p>Site content goes here.</p>
</body>
</html>

heading (h1) element는 아래와 같이 찾을 수 있습니다.

heading1 = driver.find_element_by_tag_name('h1')


find_element_by_class_name

class 속성의 이름으로 element를 찾을 수 있습니다.

<html>
<body>
	<p class="content">Site content goes here.</p>
</body>
</html>

p element는 아래와 같이 찾을 수 있습니다.

content = driver.find_element_by_class_name('content')


find_element_by_css_selector

CSS selector syntax를 이용해 찾을 수 있습니다.

<html>
<body>
	<p class="content">Site content goes here.</p>
</body>
</html>

p element는 아래와 같이 찾을 수 있습니다.

content = driver.find_element_by_css_selector('p.content')





Comments