• 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(),ID是唯一的
    • 但是ID值也是有可能动态变化的,如果ID是带数字的或者是使用的不太规则的字符串(可能经过编码处理),那么ID值很有可能是动态变化的
    • 尽量避免使用带数字或者不规则的属性去定位元素

    二、name定位

    driver.find_elements_by_name('wd') # 返回的是列表,找出来的元素不一定是唯一的
    driver.find_element_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,表示把一个方法变为一个属性,叫做动态属性
    

      

    三、classname定位

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

    四、tagname标签名定位

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

    五、超链接定位

    a = driver.find_element_by_link_text('新闻')

    六、partialLink定位

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

    七、Xpath定位

    1、定义

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

    组合:可以过滤很多元素。

    层级关系:

    • /表示儿子
    • //表示所有的下属标签(子孙)
    • ..表示上一级 
    • .表示当前层级

    2、使用方法

    //input[@class='s_ipt'] (谓语条件)
    //input[@class='s_ipt' and not @name='wd' and @id='kw']

    //input[text()='新闻']
    //input[contains(text(), 'value')]
    //input[contains(@class, 'value')]

    元素构成:

    • tagname
    • 属性
    • text
    • 下属标签

    //相对定位[谓语条件(@class='')]/子元素tag[谓语条件]

    轴定位/轴运算:啰嗦复古的写法,但是更加灵活。 

    通过相对路径定位

    //parent::form[@id='form']
    //轴关系::元素类型[谓语条件]
    //input[@name='ie']//parent::form[@id='form']
    //input[@name='ie']//parent::form[@class, 'value']
    *表示 通配符

    八、CSS定位

    暂时没总结

    实例练习:

    """ 
     _*_ coding: utf - 8 _*_
     @Time        :2019/7/14:23:32
     @Author      :lemon_qiao
     @Email       :841195863@qq.com
     @File        :八大元素定位练习.py
     @ Software:PyCharm Community Edition
     
     """
    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定位的ype为:【{}】,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)
    

      运行结果:

    by_id定位的ype为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】
    by_name的type为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】
    by_name1的type为:【<class 'list'>】,value为:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>]】
    by_class的type为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>】
    by_class1的type为:【<class 'list'>】,value为:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>]】
    by_tag的value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-3")>】:
    超链接定位a的type为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】
    partialLink定位b的ype为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】
    Xpath定位c的ype为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-5")>】
    Xpath定位d的ype为:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value为:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】
    <selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-7")>
    

      

     

  • 相关阅读:
    Css颜色定义的方法汇总color属性设置方式
    关于css中的align-content属性详解
    关于char 指针变量char *=p;这个语句的输出问题
    事件绑定3
    事件绑定2
    事件绑定1
    XPath 初步讲解
    JSON初探
    CSS 媒体类型
    CSS Positioning(定位)
  • 原文地址:https://www.cnblogs.com/qyh0902/p/11186581.html
Copyright © 2020-2023  润新知