04-selenium 八大元素定位方法

目录

  • selenium 八大元素定位方法

    • 1.id
    • 2.name
    • 3.class name
    • 4.tag
    • 5.link text
    • 6.partial link text
    • 7.xpath
    • 8.css selector
      • 8.1 示例:特殊 iframe 操作
      • 8.2 示例:特殊 Select 操作
    • 9.总结

selenium 八大元素定位方法

对于元素的定位,WebDriver API可以通过定位简单的元素和一组元素来操作。在这里,我们需要告诉Selenium如何去找元素,以至于他可以充分的模拟用户行为,或者通过查看元素的属性和状态,以便我们执行一系列的检查。

在Selenium中,WebDriver提供了多种多样的find_element_by方法在一个网页里面查找元素。这些方法通过提供过滤标准来定位元素。当然WebDriver也提供了同样多种多样的find_elements_by的方式去定位多个元素。

find_element_byfind_elements_by区别:

1、前者返回一个元素对象,后者返回一个列表,列表内每一个都是元素对象;

2、前者若找到多个,只返回第一个,后者全部返回;

1.id

`driver.find_element_by_id(``‘kw‘``)`

  备注:

  • 此方法相当于JS中的getElementById(),ID是唯一的
  • 但是ID值也是有可能动态变化的,如果ID是带数字的或者是使用的不太规则的字符串(可能经过编码处理),那么ID值很有可能是动态变化的
  • 尽量避免使用带数字或者不规则的属性去定位元素

2.name

`driver.find_elements_by_name(``‘wd‘``) ``# 返回的是列表,找出来的元素不一定是唯一的`
  • name属性经常用来进行元素定位(input输入、标记),但是要注意radio和checkbox,返回的是一个WebElement。

new_ele =driver.find_element_by_name(‘tj_trnews‘)
print(new_ele.text) # 获取元素的文本
print(new_ele.get_attribute(‘href‘)) # get_attribute方法用于获取某个元素的某个属性
print(new_ele.tag_name)
# 使用这种不唯一的属性定位元素时。可以现在网页上用js定位一下看属性是否是唯一的
# 一个类的方法上有@property,表示把一个方法变为一个属性,叫做动态属性

3.class name

`d ``=` `driver.find_element_by_class_name(``‘s_btn‘``)``d1 ``=` `driver.find_elements_by_class_name(``‘s_btn‘``)`
  • 如果classname有空格,要把有空格的部分去掉,再次确认用没用空格的部分查找看是否是唯一的元素

    如果用xpath的话,可以有空格

4.tag

基本不用,因为找出来的元素一大把

5.link text

`a ``=` `driver.find_element_by_link_text(``‘新闻‘``)`

6.partial link text

b=driver.find_element_by_partial_link_text(‘新‘) # 通过一部分查找

7.xpath

结合<webservice接口>一文的3.4.1查看

Xpath即为XML路径语言(XML Path Languagr),他是一种用来确定XML文档中某个部分的语言

  • 路径: 按路径选择
  • 标签名: 选定所有该名的标签
  • *: 选定所有元素
  • . : 选择当前节点
  • ..: 选择上级节点
  • //: 选择当前元素下所有级别的元素
  • [@属性名]:选择所有具有当前属性的元素
  • [@属性名=属性值]: 选择属性=属性值的元素
  • [子标签名]:选择具有当前子标签的元素
  • [子标签名=‘文本‘]: 选择子标签文本的元素
  • contains():比如当属性值只写部分,可以该函数,如//span[contains(@class,‘***‘)]
  • text():文本不是元素属性,不能用@,如//a[contains(text(),‘‘)]

8.css selector

https://www.w3school.com.cn/cssref/css_selectors.asp

8.1 示例:特殊 iframe 操作

iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。

在一个<html>中,包含了另一个<html>

示例

<html>
  <head>
    <title>iframe示例</title>
  </head>
  <body>
    <h1>
      这里是H1,标记了标题
    </h1>
    <p>
      这里是段落,标记一个段落,属于外层
    </p>
    <div>
      <iframe id="iframe-1">
        <html>
          <body>
            <p>
              这里是个段落,属于内层,内联框架中的
            </p>
            <div id="div-1">
              <p class="hahahp">
                这里是div中的段落,需要被定位
              </p>
            </div>
          </body>
        </html>
      </iframe>
    </div>
  </body>
</html>

需要定位上面示例中的``:这里是div中的段落,需要被定位

如下是selenium WebDiriver的代码

## 查找并定位 iframe
element_frame = driver.find_element_by_css_selector(‘#iframe-1‘)
## 切换到刚刚查找到的 iframe
driver.switch_to.frame(element_frame)
## 定位 <p>
driver.find_element_by_css_selector(‘#div-1 > p‘)
## TODO....
## 退出刚刚切换进去的 iframe
driver.switch_to.default_content()

8.2 示例:特殊 Select 操作

<select> 是选择列表

Select 是个selenium的类selenium.webdriver.support.select.Select

Select 类的路径:

C:\Python35\Lib\site-packages\selenium\webdriver\support\select.py

<select id="brand">
  <option value ="volvo">Volvo</option>
  <option value ="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

示例,选择 Audi

## 查找并定位到 select
element_select = driver.find_element_by_css_selector(‘#brand‘)
## 用Select类的构造方法,实例化一个对象 object_select
object_select = Select(element_select)
## 操作 object_select
object_select.select_by_index(3)
## 也可以这样
object_select.select_by_value(‘audi‘)
## 还可以这样
object_select.select_by_visible_text(‘Audi‘)

9.总结

  • 使用Xpath这种方式进行定位,webdriver会将整个页面的所有元素进行扫描来找到我们所需的元素, 所以当脚本中大量使用XPath方式定位,会大大降低脚本的执行速度
  • 从源码角度,selenium的定位只有2种:Xpath和css selector
  • css与xpath区别:

    1.css 更加简洁

    2.xpath 的功能更强大。 对于简单的元素定位,css, 复杂的元素,xpath.

    3.xpath 可以使用 text 文本定位, css 不行。

    4.效率。通常来说,xpath 的解析效率会低。css 要快一些. IE都慢

‘‘‘八大元素定位练习‘‘‘
from selenium.webdriver import Chrome

driver = Chrome()

driver.get(‘http://www.baidu.com‘)

# 1、ID定位
by_id = driver.find_element_by_id(‘kw‘)  # 百度首页的输入框
print(‘by_id定位的type为:【{}】,value为:【{}】‘.format(type(by_id), by_id))

# 2、name定位
by_name = driver.find_element_by_name(‘wd‘)  # 百度首页的输入框
by_name1 = driver.find_elements_by_name(‘wd‘)  # 百度首页的输入框
print(‘by_name的type为:【{}】,value为:【{}】‘.format(type(by_name), by_name))
print(‘by_name1的type为:【{}】,value为:【{}】‘.format(type(by_name1), by_name1))

# 3、classname定位
# by_class = driver.find_element_by_class_name(‘btn self-btn bg s_btn‘)  有空格会报错
by_class = driver.find_element_by_class_name(‘s_btn‘)
by_class1 = driver.find_elements_by_class_name(‘s_btn‘)
print(‘by_class的type为:【{}】,value为:【{}】‘.format(type(by_class), by_class))
print(‘by_class1的type为:【{}】,value为:【{}】‘.format(type(by_class1), by_class1))

# 4、tagname标签名定位
by_tag = driver.find_element_by_tag_name(‘input‘)
print(‘by_tag的value为:【{}】:‘.format(by_tag))

# 5、超链接定位
a = driver.find_element_by_link_text(‘新闻‘)
print(‘超链接定位a的type为:【{}】,value为:【{}】‘.format(type(a), a))

# 6、partialLink定位
b = driver.find_element_by_partial_link_text(‘新‘)  # 通过一部分查找
print(‘partialLink定位b的ype为:【{}】,value为:【{}】‘.format(type(b), b))

# 7、Xpath定位
c = driver.find_element_by_xpath("//a[text()=‘学术‘]")
# d = driver.find_element_by_xpath("//span[contains(@class, ‘refresh‘)]")
d = driver.find_element_by_xpath("//input[@class=‘s_ipt‘ and @name=‘wd‘ and @id=‘kw‘]")
print(‘Xpath定位c的ype为:【{}】,value为:【{}】‘.format(type(c), c))
print(‘Xpath定位d的ype为:【{}】,value为:【{}】‘.format(type(d), d))
e = driver.find_element_by_xpath("//a[contains(text(), ‘123‘)]")
f = driver.find_element_by_xpath("//input[contains(@class, ‘ipt‘)]")

# 轴定位
h = driver.find_element_by_xpath("//input[@name=‘ie‘]//parent::form[@id=‘form‘]")
print(h)

原文地址:https://www.cnblogs.com/testeremma/p/12684494.html

时间: 2024-09-28 14:13:36

04-selenium 八大元素定位方法的相关文章

Web自动化测试 四 ----- python selenium 八大元素定位

python selenium 八大元素定位方法 前提条件:先要引入webdriver模块,创建一个Chrom浏览器对象,以及打开一个网页(以百度为例). 1 from selenium import webdriver 2 3 driver = webdriver.Chrome() 4 5 driver.get('http://www.baidu.com') 一.ID定位 driver.find_element_by_id('kw') 备注: 此方法相当于JS中的getElementById(

3 Python+Selenium的元素定位方法(id、class name、name、tag name)

[环境] Python3.6+selenium3.0.2+IE11+Win7 [定位方法] 1.通过ID定位 方法:find_element_by_id('xx') 2.通过name定位 方法:find_element_by_name('xx') 3.通过class name定位 方法:find_element_by_class_name('xx') 4.通过tag name定位 方法:find_element_by_tag_name('xx') 说明:tag name在html中是标签的名字,

Selenium常见元素定位方法和操作

一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locating-elements.html        这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素: find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text fin

[python爬虫] Selenium常见元素定位方法和操作的学习介绍

这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~ 前文目录: [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上) [Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图 [Python爬虫] Selenium实现自动登

selenium的元素定位方法-By

如果在定位元素属性中包含了如ID等元素属性,那么在一个测试中,定位方法具体有哪几种,可以参考by模块中的By类,By的代码如下: class By(object): """ Set of supported locator strategies. """ ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT

selenium自动化测试——常见的八种元素定位方法

selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位:find_element_by_tag_name() 4.通过 class 定位:find_element_by_class_name() 5.通过 css 定位:find_element_by_css_selector() 6.通过 link 定位:find_element_by_link_tex

selenium元素定位方法介绍

元素定位方法 元素名称 webdriver API id find_element_by_id() name find_element_by_name() class name find_element_by_class_name() tag name find_element_by_tag_name() link text find_element_by_link_text() partial link text find_element_by_partial_link_text() xpat

Selenium Webdriver元素定位的方式

Selenium Webdriver元素定位的方式 主要就是By类的 1.By.name() ## html代码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><span id="gbqfsa">Google Search</span></button>

Appium学习笔记4_元素定位方法

Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自己的了解和学习,简单的总结下关于Appium native APP上的一些元素定位方法的使用以及通过UI Automator Viewer定位页面以后,如果从上面定位到你想使用的元素. 已淘宝为例,来进行元素的定位.打开UI Automator Viewer Appium和Webdriver有一点区