selenium篇之元素定位

元素定位

官网传送门

有多种策略可以在页面中定位元素。您可以根据自己的情况选择最合适的一种。Selenium提供了以下方法来查找页面中的元素:

  • 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
    查找多个元素(这些方法将返回一个列表):

  • 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和find_elements。

用法示例:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

这些是按类可用的属性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

通过ID定位

当您知道元素的id属性时,请使用此属性。使用此策略,将返回id属性值与位置匹配的第一个元素。如果没有元素具有匹配的id 属性,NoSuchElementException则将引发a。

例如,考虑以下页面来源:

<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>

表单元素可以这样定位:

login_form = driver.find_element_by_id('loginForm')

按name查找

当您知道元素的名称属性时,请使用此属性。使用此策略,将返回名称属性值与位置匹配的第一个元素。如果没有元素具有匹配的名称 属性,NoSuchElementException则将引发a。

例如,考虑以下页面来源:

<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>

用户名和密码元素可以这样定位:

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

这将显示“登录”按钮,就像在“清除”按钮之前一样:

continue = driver.find_element_by_name('continue')

通过XPath定位

XPath是用于在XML文档中定位节点的语言。由于HTML可以是XML(XHTML)的实现,因此Selenium用户可以利用这种功能强大的语言来定位其Web应用程序中的元素。XPath扩展了(同时支持)通过id或name属性进行定位的简单方法,并开辟了各种新的可能性,例如在页面上定位了第三个复选框。

使用XPath的主要原因之一是,当您没有想要查找的元素的合适的id或name属性时。您可以使用XPath以绝对术语(不建议使用)定位元素,也可以相对于具有id或name属性的元素定位。XPath定位器还可用于通过id和name以外的属性指定元素。

绝对XPath包含来自根(html)的所有元素的位置,因此,仅对应用程序进行一点点调整就可能导致失败。通过找到具有id或name属性的附近元素(最好是父元素),您可以根据关系找到目标元素。这种更改的可能性要小得多,并且可以使您的测试更可靠。

例如,考虑以下页面来源:

<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>

表单元素可以这样定位:

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进行少许更改,则会中断)
HTML中的第一个表单元素
具有名为id的属性和值为loginForm的表单元素
username元素可以这样定位:

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']")

具有输入子元素的第一个表单元素,其子元素具有名为name的属性 和值username
表单元素的第一个输入子元素,其属性名为 id,值为loginForm
第一个输入元素具有名为“ name”的属性和值 username
“清除”按钮元素可以这样定位:

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

输入具有名称属性和值的属性,并继续输入属性类型和值按钮的属性
form元素的第四个输入子元素,其属性名为 id且值为loginForm

通过链接文本查找超链接

当您知道锚标记中使用的链接文本时,请使用此选项。使用此策略,将返回链接文本值与位置匹配的第一个元素。如果没有元素具有匹配的链接文本属性,NoSuchElementException则将引发a。

例如,考虑以下页面来源:

<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.html链接可以这样定位:

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

定位元素的标签名称

当您要通过标签名称查找元素时,请使用此选项。使用此策略,将返回具有给定标签名称的第一个元素。如果没有元素具有匹配的标签名称,NoSuchElementException 则将引发a。

例如,考虑以下页面来源:

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

标题(h1)元素可以这样定位:

heading1 = driver.find_element_by_tag_name('h1')

定位元素的类名

要按类属性名称查找元素时,请使用此选项。使用此策略,将返回具有匹配类属性名称的第一个元素。如果没有元素具有匹配的类属性名称,NoSuchElementException则将引发a。

例如,考虑以下页面来源:

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

“ p”元素可以这样定位:

content = driver.find_element_by_class_name('content')

通过CSS选择器定位元素

当您要通过CSS选择器语法查找元素时,请使用此选项。使用此策略,将返回具有匹配CSS选择器的第一个元素。如果没有元素具有匹配的CSS选择器,NoSuchElementException则将引发a。

例如,考虑以下页面来源:

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

“ p”元素可以这样定位:

content = driver.find_element_by_css_selector('p.content')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值