zoukankan      html  css  js  c++  java
  • Selenium-webdriver 之元素定位方法归类

      要实现UI 自动化,Selenium 是一个必不可少的测试工具!通过selenium的webdriver,几乎可以实现所有的UI自动化!目前定位元素的方法有很多,具体的要用那几张方法选择这个不但要考虑到个人的习惯,更多的还是要看响应的时间以及定位的准确性和稳定性!

    一,定位元素的方法:

    1)id

    2) name

    3) class name

    4) tag name

    5) link test 

    6) partial link text

    7) xpath

    8) css selector 

    二,定位方法选择:

    如果看到链接类的a标签,可以直接使用 find_element_by_link_text 定位

    大部分人做自动化为了方便直接用xpath,但是这个不适用于经常UI改版的模块!因为一些元素的位置可能会有更改,如果使用其他属性去定位,即便是位置更改了属性还是原来的属性,这样方便后期的维护!另外使用xpath方法定位,也是通过程序转换成css selector 方法,不如直接使用css selector 定位快捷!如果一个元素有多个类,优先推荐使用CSS方法定位,如:

    div.类名1.类名2  另外还有些元素id是不固定的,所以定位前先确认在写代码!

    三,以下是几种方法定位元素的实现方式对比:

        直接定位                                                  xpath方法定位                               css selector 方法定位

    1️⃣ find_element_by_id("id值")             2️⃣    //*[@id="id值"]                 3️⃣    ----[#值]
    1️⃣find_element_by_name("name值") 2️⃣ //*[@name="name值"] 3️⃣ -----[name=值]
    1️⃣find_element_by_class_name("某一个class name") 2️⃣//*[contains(@class, "某一个class name")] 3️⃣[.值]

    1️⃣find_element_by_tag("标签名") 2️⃣ //标签名 3️⃣ 直接写标签
    1️⃣find_element_by_link_text("链接文字") 2️⃣ //a[text()="链接文字"] 3️⃣ 不支持
    1️⃣find_element_by_partial_text("部分链接文字") 2️⃣ // a[contains(text(), "部分链接文字")] 3️⃣不支持


    四,几种比较特殊的元素定位方法
    1)下拉菜单元素的定位 需要导入包 from selenium.webdriver.support.select import Select 备注:Select 只对<select>标签的下拉菜单有效,具体格式为:
    Select(driver.find_element_by_id('id值')).select_by_index() 按照索引去定位元素
    Select(driver.find_element_by_id('id值')).select_by_value()  按照value值去定位元素
    Select(driver.find_element_by_id('id值')).select_by_visible_text()  按照选项文字去定位元素  参数为option对应的text值

    2)滑动模块拖动的元素定位操作 需要引入ActionChains 类 from selenium.webdriver.common.action_chains importActionChains

    首先定位原始的元素位置   a1 = driver.find_element_by_id('xx')
    定位拖动后元素的位置     a2 =driver.find_element_by_css_selector('[name=xx]')
    拖动操作的语句       ActionChains(driver).drag_and_drop(a1,a2).perform()

    3)鼠标滑过 ActionChains(driver).move_to_element(driver.find_element_by_link('')).perform() 其他鼠标类的操作比较简单,如有疑问请自行百度!
    4)键盘操作 使用前需要导入keys类包 from selenium.webdriver.common.keys import Keys
    具体的使用方法为 : driver.find_element_by_id('').send_keys(*)
    * 号可以替换为:
    Keys.BACK_SPACE 删除功能 Keys.SPACE 空格 Keys.TAB Tab键 Keys.ESCAPE 回退建 Keys.ENTER 回车键
    Keys.CONTROL,'c' 复制 Keys.CONTROL,'x' 剪切 Keys.CONTROL,'v' 粘贴  Keys.CONTROL,'a' 全选
    5)js 方法 :有些元素是操作不到的,比如只读元素,隐藏的元素等,为了操作这些元素需要用JS 进行操作,具体操作步骤如下(以日期的选择框为例,好多的日期选择只能点击不能输入,改成输入的):
    #首先是将所需要更改的元素用js定义一下,删除只读属性,有的是隐藏属性
    js = '''
    document.querySelector('[name=act_start_time]').removeAttribute("readonly");
    document.querySelector('[name='act_stop_time]').removeAttribute("readonly");

    '''
    driver.execute_script(js)

    ls = driver.find_element_by_css_selector('[name=act_start_time]')

    ls.send_keys('2019-09-03 17:30')

    ll = driver.find_element_by_css_selector('[name=act_stop_time]')

    ll.send_keys('2019-09-09 17:30')

      

    比小白还不如,简称少白!本人致力于发表从小白角度去阅读的文章,让大家能通过行业内的“土话”让各位学习到知识!本人也是刚写文章不足,许下宏愿希望能够做到!望大家多多支持指正!不胜感激!强调一点,本人不是大牛,不要喷我!希望多提宝贵意见!
  • 相关阅读:
    23种设计模式之原子模式
    23种设计模式之外观模式(门面模式)
    Docker指令记录
    mysql 引擎
    G1调优随笔
    jvm面试题 新生代和 老年代的区别
    java虚拟机栈 相关操作
    .net大法总章
    .net趣味面试题总结
    IOC控制反转-依赖注入
  • 原文地址:https://www.cnblogs.com/shaobai/p/11493610.html
Copyright © 2011-2022 走看看