一、Web定位方法(find_elements返回元素list)

1、id:
  find_element_by_id()  # find_element_by_id("id")
  find_elements_by_id()
2、name:
  find_element_by_name() #find_element_by_name(“name”)
  find_elements_by_name()
3、classname:
  find_element_by_class_name() # find_element_by_class_name("classname")
  find_elements_by_class_name()
4、tagname:
  find_element_by_tag_name() # find_element_by_tag_name("tagname")
  find_elements_by_tag_name()

5、linktext:  HTML中<a></a>标签代表的是链接
  find_element_by_link_text() # find_element_by_link_text(“text”)
  find_elements_by_link_text()
  find_element_by_partial_link_text() # find_element_by_partial_link_text(“partialtext”) #
  find_elements_by_partial_link_text()

6、Xpath:XML path
  find_element_by_xpath()
  find_elements_by_xpath()
PS:①一般不推荐使用绝对路径的写法,因为一旦页面结构发生变化,该路径也随之失效,必须重新写。

  ②绝对路径以单/号表示,而下面要讲的相对路径则以//表示,这个区别非常重要。当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。

   当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出现在xpath路径中时,则表示寻找父节点下的符合的子节点,

   当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级。

  ③下面是相对路径的引用写法:

    查找name属性为username的所有元素//*[@name='username']

    查找所有input标签中含有type属性的元素//input[@type]

    查找所有input标签中任意属性为‘china’的元素//input[@*='china']

    查找页面上所有的input元素://input

    查找页面上第一个form元素://form[1]

    查找页面上第一个form元素内的下一级input元素(即只包括form元素的下一级的第一个input元素,使用绝对路径表示)://form[1]/input

    查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form[1]//input 

    查找页面上id属性为kw的form元素://form[@id='kw']

    查找页面上name属性为username的input元素://input[@name='username']

    查找页面上id为loginForm的form元素下的第一个input元素://form[@id='loginForm']/input[1]

    查找页面name属性为continue并且type属性为button的input元素://input[@name='continue'][@type='button']  或 //input[@name='continue' and @type='button']

              (/input[@name='continue' or @type='button'])

    查找页面上id为loginForm的form元素下第4个input元素://form[@id='loginForm']/input[4]

    //*[@id='J_login_form']/dl/dt/input[@id='J_password']
    //*[@id='J_login_form']/*/*/input[@id='J_password']

   ④contains

    //a[contains(@name, ‘name’)]  查找所有a标签下name属性包含‘name’字符串的元素

   ⑤starts-with和ends-with

    //a[starts-with(@name, ‘user’)])查看所有a标签下name属性以‘user’开头的元素

   ⑥ Text

    //*[text()=’退出’] 查找页面文本为退出的元素

    //a[contains(text(), ’退出’)]  查找文本包含‘退出’的元素(这种方式一般用于知道超链接上显示的部分或全部文本信息时,可以使用

7、CSS:通过id,name,标签,其他属性定位
  find_element_by_css_selector()
  PS1:#号表示ID,.号表示class

    find_element_by_css_selector(‘input’)

    find_element_by_css_selector(’#kw’)

      find_element_by_css_selector(’.s_ipt’)
      find_element_by_css_selector(’[name=‘wd’]’)
      find_element_by_css_selector(“input#kw”)
      find_element_by_css_selector(“input.s_ipt”)
      find_element_by_css_selector(“input[name=‘wd’]”)
      find_element_by_css_selector(“input[name]”)
      find_element_by_css_selector("[name=‘wd’][autocomplete=‘off’]")

      find_element_by_css_selector(“input[class~=‘btn’]”) #属性值由多个空格隔开,匹配其中一个值的方法  ;例:class=btn left-btn,right-btn

      find_element_by_css_selector('.nav_btn.nav_fff')  #<a class="nav_btn nav_fff" herf="....">登录</a>


    
匹配id属性是以”id_prefix_”开头的元素:a[id^='id_prefix_']
    匹配id属性是以”_id_sufix”结尾的元素:a[id$='_id_sufix']
    匹配id属性中包含”id_pattern”字符的元素:a[id*='id_pattern'] 

  PS2:nth-child(n)  #第n个孩子

    #u_sp > a:nth-child(1)  

三、JS定位 

  id定位:document.getElementById()
  name定位:document.getElementsByName()
  tag定位:document.getElementsByTagName()
  class定位:document.getElementsByClassName()
  css定位:document.querySelectorAll()
  PS1:只有id是elment其他为elements,

  PS2:先把js语句赋值给变量,然后调用execute_script执行    

    button_js="document.getElementById('su').click();"

    driver.execute_script(button_js)

    sendkeys_js="document.getElementsByName('duan')[0].value='laoduan';"

  driver.execute_script(sendkeys_js)

PS3:JS  document.querySelector()和document.querySelectorAll()

    ①querySelector()只返回匹配的第一个元素,如果没有匹配项,返回null

    ②querySelectorAll()返回匹配的元素集合,如果没有匹配项,返回空的nodelist(节点数组)

    ③这两个方法都可以接受三种类型的参数:id(#),class(.),标签,很像jquery的选择器。

    ④两者都可以有1到多个参数

    ⑤ var obj = document.querySelector("#id");

        var obj = document.querySelector(".classname");
        var obj = document.querySelector("div");
        var el = document.body.querySelector("input[value]");
        var elements = document.querySelectorAll("#score>tbody>tr>td");
        var elements = document.querySelectorAll("#id1, #id2");

四、jQuery

   基础语法:$(selector).action()    

    search_jq = "$('#kw').val('selenium')"
    button_jq = "$('.s_btn').click()"
    driver.execute_script(search_jq)
    driver.execute_script(button_jq)

   PS:

    id为dv1的那个div, 下面的所有的input标签  #dv1 input (包括字辈和孙辈)

    id为dv1的那个div,下面的子辈的input标签 #dv1 > input (只包括字辈)

五、APP元素定位 (①基础的定位方法app都有,②elements与下面一样)

self.dr.find_element_by_accessibility_id()
self.dr.find_element_by_android_uiautomator()
self.dr.find_element_by_image()

self.dr.find_element_by_android_data_matcher()

self.dr.find_element_by_android_viewtag()

self.dr.find_element_by_custom()
self.dr.find_element_by_ios_class_chain()
self.dr.find_element_by_ios_predicate()
self.dr.find_element_by_ios_uiautomation()

selenium之定位详篇的更多相关文章

  1. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  2. 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)

    1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...

  3. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  4. selenium:css_selector定位详解

    selenium:css_selector定位详解(css selector和xpath的比较) 来源:https://www.cnblogs.com/haifeima/p/10138154.html ...

  5. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  6. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

  7. 小甲鱼PE详解之基址重定位详解(PE详解10)

    今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...

  8. selenium元素定位大全

    要做自动化,首先要了解页面结构,要了解页面结构,就要了解页面元素的定位方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合B ...

  9. Selenium常用API详解介绍

    转至元数据结尾   由 黄从建创建, 最后修改于一月 21, 2019 转至元数据起始   一.selenium元素定位 1.selenium定位方法 2.定位方法的用法 二.控制浏览器操作 1.控制 ...

随机推荐

  1. java.lang.ClassNotFoundException: org.springframework.kafka.core.KafkaAdmin

    <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring ...

  2. mybatis 集合in的用法

    <!-- 查询 设备List 的 某天,并且小于当前小时的,耗电 记录 -->    <select id="findByDeviceIdInAndBetweenRecor ...

  3. ListView中的Item不能点击的解决方法

    有时,为了实现某种功能,在Android程序中会考虑在ListView的每一个Item中添加一个Button(或ImageButton等). 但是,这样会出现一个问题: 当同时设置了Button的on ...

  4. java一周学习回顾

    快速阅读 ​ 本周在学习java过程中主要是快马观花,对java的常用框架进行相关配置 ,进行简单的调用 .包括kafka,dubbo ,zookeeper.centos配置java环境.如何打war ...

  5. redis5种数据结构讲解及使用场景

    string  list  hash set zset  探究 Redis 4 的 stream 类型 redis提供了5中数据结构,理解每种数据结构的特点对于redis开发运维非常重要.  一.字符 ...

  6. Linux 安装软件报错 Sub-process /usr/bin/dpkg returned an error code (1)

    Linux 通过 apt-get 安装软件时报错,换一个软件安装也一样. Errors were encountered while processing: blueman E: Sub-proces ...

  7. ML_Homework_Porject_2_LDA_KNN

    第二次机器学习的作业完成了,写一下总结. 作业要求:实现用线性判别分析(LDA,LinearDiscriminantAnalysis)的二分类,用KNN比较LDA和PCA在有监督学习下的分类区别. 开 ...

  8. 将bat文件注册成为系统服务

    第一章 注册系统服务准备 1.1      注册系统服务前准备 1.1.1 涉及第三方软件 Bat_To_Exe_Converter.exe (将*.bat文件转化为可执行*.exe文件) insts ...

  9. python 设计模式之策略模式

    这几天太忙了,都没空写,所以持续了好几天. 1.策略模式的定义: 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 通俗的讲,也就是将那些使用的方法 ...

  10. Greenwich.SR2版本的Spring Cloud Ribbon实例

    上次我们了解了eureka(参见Greenwich.SR2版本的Spring Cloud Eureka实例),里面的服务消费方(服务实例a-beautiful-client)我们其实已经用到了ribb ...