zoukankan      html  css  js  c++  java
  • Web自动化测试:页面元素的定位方法

    这一节,我们介绍一下页面元素定位的八种方式和如何通过火狐和谷歌浏览器获取元素定位信息.

    页面元素的定位方法

    html页面是有一个个的标签组成的,我们定位元素其实就是定位这些标签。

    首先来看一下有哪儿几种定位方式:

    id

    name

    class name

    tag name

    link text

    partial link text

    xpath

    css selector

    一共八种定位方式,其实常用的定位方式也有:xpath、css selector,至少要熟练掌握一种......

    第1种-ID定位

    from selenium import webdriver
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_id("wd1").send_keys("python")

    id定位

    代码的意思就是定位id为:“wd1”的输入框并输入了“python”这个数据

    <input id="wd1" class="search_ipt search_inp_border j_search_input tb_header_search_input" name="kw1" value="" autocomplete="off" size="42" tabindex="1" maxlength="100" x-webkit-grammar="builtin:search" x-webkit-speech="true" type="text">

    第2种-name定位

    from selenium import webdriver
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_name("kw1").send_keys("python")

    我们通过观察这个<input>标签的属性,通过name也可以成功定位这个元素

    第3种-class name定位

    from selenium import webdriver
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_class_name("search_ipt.search_inp_border.j_search_input.tb_header_search_input").send_keys("python")

    结果我们发现系统报错了,由于这个输入框的class中有四个class,

    所以当我们同点来分割时,报错:Unable to locate element:;当我们用空格分割时,报错: Compound class names not permitted

    而当我们用其中一个class时,比如:search_ipt

    这时我们才可以成功的定位元素(一般不建议用这个class name来定位)

    第4种-Tag name定位

    from selenium import webdriver
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_tag_name("input").send_keys("python")

    我们直接定位这个元素的标签名,可以成功定位,但是由于实际中tag name有很多相同的标签,可能会在运行时定位不准确,所以不建议使用这个

    第5种-Link text定位

    from selenium import webdriver 
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_link_text("地图").click()

    然后我们通过链接的名字找到元素,并进行click()点击操作,进入到了地图页

    第6种:Partial link text定位

      from selenium import webdriver
      driver =webdriver.Chrome()
      driver.get("https://tieba.baidu.com/")
      driver.find_element_by_partial_link_text("地").click()

    同样的,我们通过链接的部分文字信息来定位到这个元素,依旧可以成功定位

    第7种-Xpath定位

    from selenium import webdriver
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_xpath(".//*[@id='wd1']").send_keys("python")

    xpath定位

    xpath是比较常用的定位,由于定位比较准确,一般是百发百中,但是缺点是绝对路径的xpath根据元素标签的相对位置来定位,如果页面的UI元素有所改动,结构路径变化的话,也会导致我们无法定位元素,不过这是针对我们用firepath自动获取时的定位,我们完全可以根据层级关系和元素属性自己来写xpath路径,这样的话,即使其他路径结构变化,对于xpath定位的准确度还有一定的保障

    比如:

    1.我们把xpath的父级路径添加上

    //form/input[@id='wd1']

    2.我们还可以对所查找元素标签里的属性进行组合

    //form/input[@id='wd1' and @name='kw1']

    3.我们对文本进行匹配

    driver.find_element_by_xpath("//*[contains(text(),'网页')]").click()

    可以看出xpath简直是神器啊,有没有,可以通过标签的各种属性来定位,等于说是包含了class name、name、id、link_text这些定位的方法。

    第8种-CSS Selector定位

    from selenium import webdriver
     
    driver =webdriver.Chrome()
    driver.get("https://tieba.baidu.com/")
    driver.find_element_by_css_selector("#wd1").send_keys("python")

    通过css selector 定位

    其实这个css selector定位的强悍和xpath不相上下,也非常之强大,比如在css selector里:

    我用class来定位:driver.find_element_by_css_selector(".search_ipt")

    用id来定位:driver.find_element_by_css_selector("#wd1")

    用标签名来定位(tag name):driver.find_element_by_css_selector("input")

    用父子关系来定位:driver.find_element_by_css_selector("form>input")

    用标签和属性来定位:driver.find_element_by_css_selector("input[id='wd1']")

    以及综合上边的超级组合查询:driver.find_element_by_css_selector("form.clearfix>input[id='wd1']") #代表着class为clearfix的父级标签和自己id属性为wd1的input标签.

    这些就是定位元素的方法,很常用也非常重要,值得收藏!

    如果您看了本篇博客,觉得对您有所收获,请点击右下角的[推荐]. 如果您想转载本博客,请注明出处, 如果您对本文有意见或者建议,欢迎留言. 感谢您的阅读,请关注我的后续博客!
  • 相关阅读:
    华为云·核心伙伴开发者训练营第七期开营,共赴产业云美好明天!
    GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决
    我的应用我做主丨动手搭建招聘小应用
    大数据集群被窃取数据怎么办?透明加密可以一试
    云小课 | 使用ROMA API,API管理从此不用愁!
    带你了解Node.js包管理工具:包与NPM
    下班约会时来了新需求,咋办?
    CANN 5.0黑科技解密 | 算力虚拟化,让AI算力“物尽其用”
    15个问题自查你真的了解java编译优化吗?
    鸿蒙轻内核M核的故障管家:Fault异常处理
  • 原文地址:https://www.cnblogs.com/chuansinfo/p/13099184.html
Copyright © 2011-2022 走看看