zoukankan      html  css  js  c++  java
  • selenium:Xpath定位详解

    xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有。现在我们就来详解xpath定位方法。

    一、xpath通过元素属性定位


    xpath可以通过元素的属性来定位,如id,name,class,type等属性,元素的任意属性值都可以通过xpath来定位,只要这个属性值能唯一的标识一个元素

    我们还以百度首页的搜索框为例,用xpath通过不同属性来定位它。

    代码:

    # coding = utf-8
    from time import sleep
    from selenium import webdriver
    
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 启动浏览器
    driver = webdriver.Chrome(executable_path=driverfile_path)
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    
    # 用xpath通过id属性来定位搜索框
    # driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
    
    # 用xpath通过name属性来定位搜索框
    # #driver.find_element_by_xpath("//*[@name='wd']").send_keys('selenium')
    
    # 用xpath通过class属性来定位搜索框
    # driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys('selenium')
    
    # 用xpath通过maxlength属性来定位搜索框
    # driver.find_element_by_xpath("//*[@maxlength='255']").send_keys('selenium')
    
    # 用xpath通过autocomplete属性来定位搜索框
    driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys('selenium')
    
    # 等待5秒
    sleep(5)
    # 退出
    driver.quit()

    二、xpath通过限定元素标签定位


    • * 表示从当前页面所有的标签(tag)中来寻找元素
    • 有时候一个元素的属性值与其他元素是相同的,我们可以通过限定标签(tag)来定位

    代码:

    # coding = utf-8
    from time import sleep
    from selenium import webdriver
    
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 启动浏览器
    driver = webdriver.Chrome(executable_path=driverfile_path)
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    # 用xpath限定标签名为input并通过id属性来定位搜索框
    driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
    # 等待5秒
    sleep(5)
    # 退出
    driver.quit()

    三、层级与属性结合定位


    如果一个元素本身没有可利用的属性来定位,那么我们可以先找到它的上一级(父元素),再通过上一级来找到它。以此类推,如果它的上一级也没有可以定位的属性值,那么再找上上一级,直到找到可以定位到的那一级元素

    代码:

    # coding = utf-8
    from time import sleep
    from selenium import webdriver
    
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 启动浏览器
    driver = webdriver.Chrome(executable_path=driverfile_path)
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    # 用xpath通过上上一级来定位搜索框
    driver.find_element_by_xpath("//*[@id='form']/span/input").send_keys('selenium')
    # 等待5秒
    sleep(5)
    # 退出
    driver.quit()

    四、标签索引定位


    有时候,同一层级下有多个相同标签的元素,那么我们就只能通过标签索引来精确定位到元素了

    比如我们要定位百度首页“百度一下”按钮,它的父级元素是标签<form>下的第二个<span>。这里要注意一下,这里的索引(从1开始)与python序列中的索引(从0开始)不同

    代码:

    # coding = utf-8
    from time import sleep
    from selenium import webdriver
    
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 启动浏览器
    driver = webdriver.Chrome(executable_path=driverfile_path)
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    driver.find_element_by_id('kw').send_keys('selenium')
    # 用xpath通过标签索引定位"百度一下"按钮
    driver.find_element_by_xpath("//*[@id='form']/span[2]/input").click()
    # 等待5秒
    sleep(5)
    # 退出
    driver.quit()

    五、逻辑运算


    如果一个属性不能唯一地区分一个元素,需要两个或者两个以上的属性才能定位到元素,那么我们可以用逻辑运算符来连接两个或多个属性来定位元素,支持与(and),或(or),非(not)

    代码:

    # coding = utf-8
    from time import sleep
    from selenium import webdriver
    
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 启动浏览器
    driver = webdriver.Chrome(executable_path=driverfile_path)
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    # 用xpath通过通过逻辑运算and来定位搜索框
    driver.find_element_by_xpath("//*[@id='kw' and @name='wd']").send_keys('selenium')
    # 等待5秒
    sleep(5)
    # 退出
    driver.quit()
  • 相关阅读:
    (转)深入浅出JWT(JSON Web token)
    Node.js Koa2开发微信小程序服务端
    天翼宽带家庭网关用户:useradmin,nE7jA%5m 这个是中国电信的超级密码
    微信小程序picker重写,精确到时分秒
    Vue props中Object和Array设置默认值
    GreenDao学习
    Android注解支持(Support Annotations) (转)
    异常:Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details.
    精通 Android Data Binding
    Android BroadcastReceiver介绍 (转)
  • 原文地址:https://www.cnblogs.com/haifeima/p/10168316.html
Copyright © 2011-2022 走看看