• Selenium 八大元素定位方式


    UI自动化测本质无非就是: 定位元素 -> 操作元素 -> 模拟页面动作 -> 断言结果 -> 生成测试报告。
    所以我们做UI自动化的第一步就是定位元素,如果连元素都定位不到就更不必说接下来的操作。
    本篇随笔便是关于Selenium八大元素定位方式,让你成功定位元素。

    1. find_element_by_id

      # -*- coding:utf-8 -*-
      # 作者:IT小学生蔡坨坨
      # 时间:2020/12/13 13:42
      
      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()  # 实例化
      
      # demo01:
      # 打开云商网站
      driver.get("http://[服务器ip]/yuns/index.php")
      # 窗口最大化
      driver.maximize_window()
      time.sleep(2)
      
      # 点击我的购物车进行跳转
      driver.find_element_by_id('cart_num').click()
      time.sleep(2)
      
      # demo02:
      # 打开百度,搜索框中输入 软件测试,点击百度一下
      driver.get("http://www.baidu.com")
      time.sleep(2)
      driver.find_element_by_id("kw").send_keys("软件测试")
      time.sleep(2)
      driver.find_element_by_id("su").click()
      time.sleep(3)
      
      driver.quit()
      
    2. find_element_by_name

      # -*- coding:utf-8 -*-
      # 作者:IT小学生蔡坨坨
      # 时间:2020/12/13 13:53
      
      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()
      driver.get('http://[服务器ip]/yuns/index.php')
      
      time.sleep(2)
      
      # demo01:
      # 搜索框中输入耐克
      # 只有可输入的控件才能使用send_keys()方法,比如input控件。
      driver.find_element_by_name('key').send_keys('耐克')
      time.sleep(2)
      
      # demo02:
      # 清空搜索框中的信息
      driver.find_element_by_name("key").clear()
      
      time.sleep(3)
      driver.quit()
      
    3. find_element_by_class_name

      # -*- coding:utf-8 -*-
      # 作者:IT小学生蔡坨坨
      # 时间:2020/12/15 16:26
      
      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()
      
      # 打开云商网站
      driver.get("http://[服务器ip]/yuns/index.php")
      driver.maximize_window()
      time.sleep(2)
      
      # demo01:
      # 搜索框中输入 女装
      driver.find_element_by_class_name("but1").send_keys("女装")
      time.sleep(2)
      
      # demo02:
      # 点击搜索
      driver.find_element_by_class_name("but2").click()
      time.sleep(3)
      
      # 注意:如果class name是一个复合类(带有空格),则无法定位到元素
      # 可以使用复合类的部分单词去定位,但是不建议,因为可能会定位到多个元素
      # driver.get("http://www.baidu.com")
      # time.sleep(2)
      # driver.find_element_by_class_name("bg s_btn btn_h btnhover")  # NoSuchElementException
      
      driver.quit()
      
    4. find_element_by_link_text

      # -*- coding:utf-8 -*-
      # 作者:IT小学生蔡坨坨
      # 时间:2020/12/15 17:44
      
      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()
      
      driver.get("http://[服务器ip]/yuns/index.php")
      driver.maximize_window()
      time.sleep(2)
      
      # demo01:
      # 点击 T恤男2016
      # 精确匹配超链接载体
      driver.find_element_by_link_text("T恤男2016").click()
      time.sleep(2)
      
      # demo02;
      # 点击联系客服
      driver.find_element_by_link_text("联系客服").click()
      time.sleep(2)
      
    5. find_element_by_partial_link_text

      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()
      
      driver.get("http://[服务器ip]/yuns/index.php")
      driver.maximize_window()
      time.sleep(2)
      
      # demo01:
      # 点击 9.9抢大牌
      # partial_link_text 模糊匹配超链接载体
      driver.find_element_by_partial_link_text("抢大牌").click()
      time.sleep(2)
      
      # demo02:
      # 点击 家装节
      driver.find_element_by_partial_link_text("家装").click()
      time.sleep(2)
      
      driver.quit()
      
    6. XPath定位详解及高级方法探究

    # -*- coding:utf-8 -*-
    # 作者:IT小学生蔡坨坨
    # 时间:2020/12/13 14:06
    
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    driver = webdriver.Chrome()
    # 打开云商网站
    driver.get("http://[服务器ip]/yuns/index.php")
    # 窗口最大化
    driver.maximize_window()
    time.sleep(2)
    
    # demo01:
    # 绝对路径
    # 搜索框输入 阿迪达斯
    # XPath的下标是从1开始的
    driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[1]/form/input[1]").send_keys("阿迪达斯")
    time.sleep(2)
    
    # demo02:
    # 绝对路径
    # 点击搜索
    driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[1]/form/input[2]").click()
    time.sleep(2)
    
    # demo03:
    # 绝对路径
    # 点击 芭芭鸭
    driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/dl/dd/a[31]").click()
    time.sleep(2)
    
    # demo04:
    # 相对路径
    # 搜索框输入 女装
    # XPath相对路径以 // 开头,通过属性匹配 @class=
    driver.find_element_by_xpath("//input[@class='but1']").send_keys("女装")
    time.sleep(2)
    
    # demo05;
    # 清空搜索框中的内容
    # 通过多个属性匹配,使用and连接
    driver.find_element_by_xpath("//input[@class='but1' and @name='key']").clear()
    time.sleep(2)
    
    # demo06:
    # 搜索框输入 童装
    # 通过属性模糊匹配 [contains(@属性名,'属性值')]
    driver.find_element_by_xpath("//input[contains(@placeholder,'请输入')]").send_keys("童装")
    
    # demo07;
    # 点击搜索
    driver.find_element_by_xpath("//form/input[2]").click()
    time.sleep(2)
    
    # demo08:
    # 点击 我的购物车
    driver.find_element_by_xpath("//div[@class='small_cart_name']/i").click()
    time.sleep(2)
    
    # demo09:
    # 点击现在就去购物
    # 通过 * 匹配
    driver.find_element_by_xpath("//*[@class='r']/a").click()
    time.sleep(2)
    
    # demo10:
    # 点击登录 跳转到登录页面
    driver.find_element_by_xpath("//div/a").click()
    time.sleep(2)
    
    # demo11:
    # 输入用户名:
    driver.find_element_by_xpath("//div[@class='binput']/input[@name='username']").send_keys("15059225599")
    time.sleep(1)
    
    # demo12;
    # 输入密码:123456
    driver.find_element_by_xpath("//input[@name='password']").send_keys("123456")
    time.sleep(1)
    
    # demo13:
    # 点击登录按钮
    driver.find_element_by_xpath("//input[@name='submit']").click()
    time.sleep(2)
    
    # demo14:
    # 点击我的订单
    driver.find_element_by_xpath("//div[@class='help']/a[2]").click()
    time.sleep(2)
    
    # demo15:
    # 点击收货地址
    driver.find_element_by_xpath("//div[@class='left']/dl/dd[3]/a").click()
    time.sleep(2)
    
    # demo16;
    # 点击 新增收货地址
    driver.find_element_by_xpath("//a[@id='add_address']").click()
    time.sleep(2)
    
    # demo17;
    # 输入姓名:蔡坨坨
    driver.find_element_by_xpath("//input[@id='recive_name']").send_keys("蔡坨坨")
    time.sleep(1)
    # 输入手机:
    driver.find_element_by_xpath("//input[@name='mobile']").send_keys("15059225599")
    time.sleep(1)
    
    # 选择省市区
    driver.find_element_by_xpath("//span[@class='area_name']").click()
    time.sleep(2)
    # 选择陕西省
    driver.find_element_by_xpath("//div/a[27]").click()
    time.sleep(2)
    # 鼠标移到选择省市区
    ele = driver.find_element_by_xpath("//span[@class='area_name']")
    ActionChains(driver).move_to_element(ele).perform()
    time.sleep(2)
    # 选择西安市
    driver.find_element_by_xpath("//div[@class='conbox'][2]/a[1]").click()
    time.sleep(2)
    # 鼠标移到选择省市区
    ActionChains(driver).move_to_element(ele).perform()
    time.sleep(2)
    # 选择市辖区
    driver.find_element_by_xpath("//div[@class='conbox'][3]/a[1]").click()
    time.sleep(2)
    
    # 输入详细地址
    driver.find_element_by_xpath("//input[@placeholder='收件人详细地址']").send_keys("西安")
    time.sleep(1)
    
    # demo18:
    # 点击确认,提示保存成功
    driver.find_element_by_xpath("//div[2]/div/div[3]/a[2]").click()
    time.sleep(3)
    
    driver.quit()
    
    7. CSS定位详解及高级语法详解
    # -*- coding:utf-8 -*-
    # 作者:IT小学生蔡坨坨
    # 时间:2020/12/13 14:07
    
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    
    # 打开云商网站
    driver.get("http://[服务器ip]/yuns/index.php")
    driver.maximize_window()
    time.sleep(2)
    
    # demo01:
    # 绝对路径,使用 > 分隔,在搜索框中输入童装
    # CSS Selector下标从1开始,跟XPath一样
    driver.find_element_by_css_selector("html>body>div>div>div>div>form>input:nth-child(1)").send_keys("童装")
    time.sleep(2)
    
    # demo02:
    # 绝对路径,使用 空格 分隔,点击“家装节”进行跳转
    driver.find_element_by_css_selector("html body div.logo_bar div div.sch div.schhot a:nth-child(2)").click()
    time.sleep(2)
    
    # demo03:
    # 绝对路径,使用 > 加 空格 分隔,点击“T恤男2016”进行跳转
    driver.find_element_by_css_selector("html body div.logo_bar div > div.sch > div.schhot > a:nth-child(5)").click()
    time.sleep(2)
    
    # demo04:
    # 相对路径,通过class选择器定位元素,清空搜索框中的文本信息
    # class选择器: .
    driver.find_element_by_css_selector("input.but1").clear()
    time.sleep(2)
    
    # demo05:
    # 通过class选择器定位元素,在搜索框中输入女装
    driver.find_element_by_css_selector(".but1").send_keys("女装")
    time.sleep(2)
    
    # demo06:
    # 通过class选择器定位元素,点击搜索按钮
    driver.find_element_by_css_selector(".but2").click()
    time.sleep(2)
    
    # demo07:
    # 通过id选择器定位元素,点击购物车
    # id选择器: #
    driver.find_element_by_css_selector("i#cart_num").click()
    time.sleep(2)
    
    # demo08:
    # first-child,点击首页跳转至首页
    driver.find_element_by_css_selector(".help>a:first-child").click()
    time.sleep(2)
    
    # demo09:
    # 通过id选择器定位元素,点击购物车
    driver.find_element_by_css_selector("#cart_num").click()
    time.sleep(2)
    
    # demo10:
    # last-child,点击联系客服进行跳转
    driver.find_element_by_css_selector(".help>a:last-child").click()
    time.sleep(2)
    
    # demo11:
    # 通过属性定位,注意与XPath区别,在搜索框输入拖鞋
    driver.find_element_by_css_selector("input[placeholder='请输入你要查找的关键字']").send_keys("拖鞋")
    time.sleep(2)
    
    # demo12:
    # 通过多个属性定位,注意与XPath区别,清空搜索框中的文本信息
    driver.find_element_by_css_selector("input[name='key'][class='but1']").clear()
    time.sleep(2)
    
    # demo13:
    # 倒序 nth-last-child(),点击首页进行跳转
    driver.find_element_by_css_selector(".help>a:nth-last-child(3)").click()
    time.sleep(2)
    
    # demo14:
    # 在搜索框中输入球鞋
    driver.find_element_by_css_selector("div[class='schbox']>form>input:nth-child(1)").send_keys("球鞋")
    
    # demo15:
    # css_selector 不区分干儿子和亲儿子,
    # 若一个标签下有多个同级标签,虽然这些同级标签的tag name不一样,但是他们是放在一起排序的
    # 打开百度,在搜索框中输入 软件测试 ,点击百度一下
    driver.get("http://www.baidu.com")
    driver.maximize_window()
    time.sleep(3)
    driver.find_element_by_css_selector("form#form>span:nth-child(8)>input").send_keys("软件测试")
    driver.find_element_by_css_selector("form#form>span:nth-child(9)>input").click()
    time.sleep(3)
    
    # 关闭当前窗口
    driver.close()
    time.sleep(3)
    
    # 关闭所有窗口
    driver.quit()
    
    1. find_elements_by_tag_name

      tag = driver.find_elements_by_tag_name("input")
      
  • 相关阅读:
    css实现鼠标悬浮字体流光背景模糊效果
    原生JS实现省市区(县)三级联动选择
    多线程的对象锁和类锁
    session、cookie与“记住我的登录状态”的功能的实现
    Java NIO FileVisitor 高效删除文件
    mysql 服务启动失败
    Http 协议详解
    设计模式 之 策略模式
    简单探讨 javascript 闭包
    数据库SQL优化大总结之 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/caituotuo/p/14186479.html
Copyright © 2020-2023  润新知