0


吐血整理 python 从零开始学UI自动化(含代码)持续更新,建议收藏!

第二章

--------------WebDrriver元素定位------------------

白开水笔记,内涵代码可跟着敲一敲,ui自动化必须会的定位

2.0 WebDriver概述

          只支持jdk1.8及以上

          通过ms官方的webdriver支持Edge浏览器

          通过mozilla官方的geckodriver来支持火狐

2.1 安装selenium

          安装命令:   pip install selenium

          查看版本:pip show selenium

   dos 退出某个环境:quit()

   查看安装路径:where python

  

   重要!!安装火狐浏览器驱动

   https://github.com/mozilla/geckodriver/releases/tag/v0.31.0

   解压后放到py安装目录下

2.2 WebDriver提供了八中定位元素方式,并提供对应的方法

这个是老方法不用了,仅供了解

                 1*   id                 find_element_by_id("id属性值")

                 2*    name            find_element_by_name("name属性值")

                 3    link text                find_element_by_link_text(“连接文本”)

                 4    partial link text     find_element_by_partial_link_text(“部分连接文本”)

                 5    class name    find_element_by_class_name(“类名”)

                 6    tag name      find_element_by_tag_name(“标记名称”)

                 7*   xpath            find_element_by_xpath(“xpath表达式”)

                 8    css selector         find_element_by_css_selector(“css表达式”)

                       

新方法统一调用find_element()方法,通过类by来声明定位方法,并传入相应的定位参数

示例:

   find_element(定位类型,定位具体信息)

   需要导入类by

   from selenium.webdriber.common.by import By

   1*   id                               find_element(By.ID,"id属性值")

   2*    name                          find_element(By.NAME,"name属性值")

   3    link text                find_element(By.LINK_TEXT,“连接文本”)

   4    partial link text     find_element(By.PARTIAL_LINK_TEXT,“部分连接文本”)

   5    class name                  find_elemente(By.LINK_TEXT,“类名”)

   6    tag name                    find_element(By.TAG_NAME,“标记名称”)

   7*   xpath                          find_element(By.XPATH,“xpath表达式”)

   8    css selector         find_element(By.CSS_SELECTOR,“css表达式”)

2.3 ID定位 核心知识点

          from selenium import webdriver   # 导入webdriver

          from selenium.webdriver.common.by import By    #导入By

          from time import sleep       #导入time

          # 对火狐实例化

          d = webdriver.Firefox()

          # 定位元素

          myname = d.find_element(By.ID,"username")

  

2.3.1 操作

   文本框输入:

                 文本框.send_keys(数据)

                        myname.send_keys("张三")

   单击按钮:

                 按钮.click()

                 tijiao = d.find_element(By.ID,"tijiao")

                 tijiao.click()

   关闭浏览器:

                 driver.quit()

   控制运行速度:

                 sleep(3)

2.4 name定位 参考id定位

2.5 linktext定位

                 find_element(By.LINK_TEXT,"链接文字")

          lian1 = driver.find_element(By.LINK_TEXT,"连接文字")

          sleep(1)

          lian1.click()  #点击连接

   示例2:

          url="https://www.baidu.com"

          driver = webdriver.Firefox()

          driver.get(url) #打开浏览器

          news = driver.find_element(By.LINK_TEXT,"新闻")

          new.click  #点击连接

2.6 partial link text 定位

                 find_element(By.PARTIAL_LINK_TEXT,"部分链接文字")

          示例:

          from selenium import webdriver

          from selenium.webdriver.common.by import By

          from time import sleep

          driver= webdriver.Firefox()

          url="https://www.baidu.com"

          driver.get(url)

          link = driver.find_element(By.PARTIAL_LINK_TEXT,"hao") #首页的hao123

          sleep(2)

          link.click()

2.7 class name 定位

          from selenium import webdriver

          from selenium.webdriver.common.by import By

          from time import sleep

          driver = webdriver.Firefox()

          url="打开的地址 "

          driver.get(url)

          data_username = "zhangsan"

          data_password ="123456"

          name = driver.find_element(By.CLASS_NAME,"username")

          pw = driver.find_element(By.CLASS_NAME,"password")

          submit = driver.find_element(By.CLASS_NAME,"submit")

          name.send_keys(data_username)

          pw.send_keys(data_password)

          submit.click()

          driver.quit() #退出浏览器

2.8 tag name定位(有很多时,只能定位第一个,后面的定位不到了)

          mylink = driver.find_element(By.TAG_NAME,"a")

          mylink.click()

          driver.back()   #返回

2.9 火狐插件安装插件

                 Try xpath    --Xpath验证工具

                 xpath finder   --生成Xpath工具

   在浏览器按F12左侧的元素定位,点击元件,在查看器蓝色部分右击、

找菜单复制(copy),点击copy XPATH。即可复制元素路径

XPath 路径表达式

                 绝对路径定位元素

                 相对路径定位元素

2.10 绝对路径定位元素

          绝对路径XPath表达式已斜线“/”开始,从根节点标记html开始,逐级

                 示例:/html

                        /html/body/form/textarea

   精确定位基本语法: /html/body/form/input[@value='姓名']

   python定位语法:

   myname=driver.find_element(By.XPATH,"/htme/body/form/input[@value='姓名']")

   重点说明:

          为了精确定位。需要加一些属性说明

                 属性说明使用方括号[]括起来

                 属性名称前使用@前缀

                 属性说明格式:节点名称[@属性名="属性值"]

   绝对路径定位缺点:表达式长,可维护性差,不推绝对路径定位方式,因为页面发生一点变化,原有定位的xpath表达式就会失效

2.11 相对路径定位元素

          点对路径XPATH表达式已斜线“//”开始,表示在文档中的全部层级查找

          精确定位基本语法: //input[@value='姓名']

   重点说明:

          相对路径查找以'//'开头,表示在html文档中的全部层级位置进行查找所有满足双斜线“//”之后规则的元素(无论层级关系)

   推荐使用相对路径Xpath表达式,可以大大降低测试脚本中定位表达式的维护成本

2.12 谓词(就是附加哦条件)写在[]中的

                 //input[@id='password']

          常用的方法:

                 使用页面元素的 属性值

                 使用页面元素的 索引号

                        索引号是从1开始

                               //input[1]

                 使用页面元素的 存在某属性

                        节点名称[@属性名称]

                               //input[@checked]

                              

                 使用页面元素的 存在某子节点

                        节点名称[子节点名称]

                               //ul[lable]

                        u1 = driver.find_element(By.XPATH,"//ul[lable]")

                 使用页面元素的 子节点值

                        节点名称[子节点名称='子节点文本值']

                               //ul[li="英语"]

                        u2=driver.find_element(By.XPATH,"//ul[li = '英语']")

2.13 多条件查找:

          如果通过一个属性信息不能定位到元素,可通过多个属性信息进行定位

          语法:

                 //节点名称[@属性名1="属性值2"][@属性名2="属性值2"]

                 //节点名称[@属性名1="属性值2" and @属性名2="属性值2"]

          a1=driver.find_element(By.XPATH,"//*[@id='linka' and @name='demo']")

2.14 通配符

          '*'表示匹配任何元素节点

                 示例1:

                        //*[@id='username']查找任何id属性值等于username的元素节点

                 示例2:

                        //select[@name]/* 查找存在name属性的select节点的所有子节点

          '@*'表示匹配任何属性

                 示例1:

                        //input[@*='password']查找任何属性值等于password的input元素节

                 示例2:

                        //select[@*]查找所有带有属性的select元素节点

                 示例3:

                        //*[@*='飞机']查找任何属性等于“飞机”的所有元素节点

2.15 css定位概述

          css中文意思层叠样式单

          dricer.find_element(By.CSS_SELENCE,"css表达式")

          绝对路径定位

                        如:html>body>form>textarea

                 精确定位语法:html>body>form>input[value="姓名"]

          相对路径定位

                 精确定位语法:input[value="姓名"]

2.16 css精确定位方式

          1、属性名="属性值"

                 input[id="password"]

                 mypassword = driver.find_element(By.CSS_SELECTOR,'input[id="password"]')

          2、使用属性:

                 input[checked]

                 mypassword = driver.find_element(By.CSS_SELECTOR,'input[checked]')

          3、使用ID属性值:

                 input#password

                 mypassword = driver.find_element(By.CSS_SELECTOR,'input#password')

          4、使用class属性值

                 input.username

                 mypassword = driver.find_element(By.CSS_SELECTOR,'input.username')

2.17 定位一组元素

                 批量操作多个元素

                 先获取一组元素,在从这组对象中过滤出需要操作的元素

          WebDriver 提供find_element**s**()方法进行定位一组元素

                 注意:这是的element加了s

2.17.1 一些辅助功能

          is_selecter()  判断按钮是否选中

          get_attribute  获得属性值

          示例:

          from selenium import webdriver

          from selenium.webdriver.common.by import By

          from time import sleep

          driver = webdriver.Firefox()

          url = file:///D:/selenium_demo/demo11.html  #这是我本地的demo你需要换成自己的

          driver.get(url)

          # 定位单选按钮,采用一组定位方式

          pay = driver.find_elements(By.NAME, "pay")

          可用下标使用元素,pay[2].click()   #点击第三个元素(下标从0开始数)

          # print(pay)

          # 可以使for循环遍历列表pay,获取每一个元素信息

          for i in pay:  # 每次循环获得一个控件/元素,放在变量i中

              if not i.is_selected():  # 判断一下该单选按钮是否选中,如果没有选中,就进行点击

                  i.click()

                  v = i.get_attribute("value")  # 获取该控件的某个属性值,参数就是属性名称

                  print("点击的是那个一个按钮", v)

                  sleep(2)

          # 定位复选按钮,采用一组定位方式

          hobby = driver.find_elements(By.XPATH, "//*[@type='checkbox']")

          list1 = []

          list2 = []

          list3 = []

          for m in hobby:

              list1.append(m.is_selected())  # 获取控件的初始状态,存到list1

              list2.append(m.get_attribute('name'))  # 获得每个复选框name属性值,存在list2中

          print("复选框初始状态:", list1)

          print("所有的爱好:", list2)

          for h in hobby:

              h.click()  # 点击每一个复选框

              if h.is_selected() == True:  # 如果复选框最后选中

                  d = h.get_attribute("name")  # 获得选中复选框的name属性的值

                  list3.append(d)  # 把获得的name属性值存在list3中

          print("选的的爱好包括:", list3)

          sleep(3)

          driver.quit()

2.30 text()函数 补充

          # td标签中含“系统设置”这几个字的td

    # 在谓词当中,使用test()函数,可以获得标签中的字符串

    set = (By.XPATH, '//td[text()="系统设置"')
标签: 自动化 python ui

本文转载自: https://blog.csdn.net/weixin_51196778/article/details/126428613
版权归原作者 白开水THEONE 所有, 如有侵权,请联系我们删除。

“吐血整理 python 从零开始学UI自动化(含代码)持续更新,建议收藏!”的评论:

还没有评论