• web自动化03XPATH定位与CSS选择器及三种等待


    1、为什么用相对路径

    • 相对路径简洁些,一般就一两个层级,
    • 兼容性好些,绝对路径改个层级,路径就得改,相对路径除非改定位用的路径参数,否则不需要修改

       什么样XPATH表达式是好的XPATH表达式,

    - 长短比较, 短的,或者精简的表达式,就相对好的表达式
    - 表示找到了最明显的特性,( id, name(一般是from表单中要传参的,相当于key), text, 根据前面各种html元素喜欢和什么属性搭配起来使用的。)
    - 要避免依赖的层级过多

    2、Xpath定位方法总结

    •  标准语法                     --      //标签名[@属性名='属性值']
    • * 任意标签或者属性     --     //*[@name='wd']
    • 多个条件控制-and       --     //input[@id='' and @name='']             and 前后要加空格
    • text()文本                    --     //a[text()='新闻']
    •  contains包含              --    //input[contains(text(), '')] 
    • 索引                            --     (//*[contains(text(), '')])[1]                    索引是从 1 开始的。一定要加上括号    当元素没有明显的属性和特征, 索引,没办法了才用
    • 公式 : //标签名[]/关系名称::标签名[]
    • 找找哥哥姐姐: //input[@name='wd']/preceding-sibling::span           span表示标签名
    • 找找弟弟妹妹: //input[@name='wd']/following-sibling::span
    • 找祖先: //input[@name='wd']/ancestor::span

    3、Xpath定位注意事项

    • XPATH定位,and两边要有空格
    • 兄弟姐妹没啥特征时,用轴运算,或者索引
    • text()是函数,不是属性,属性定位要@
    • 为了减少定位问题,最好写完的xpath现在浏览器中查询下,防止有问题
    • 定位的元素属性值是不会动态变化的,如果该属性值会发生变化,不要使用这个属性定位
    • 使用属性的话,索引值为1开始,且前面要加(),如 (//*[contains(text(), '')])[1] 索引

    4、CSS选择器-#表示id,.表示class

    •  #kw 表示id=kw的元素 ,,,详细的表示:  xpath: //*[@id='kw']
    • .s_ipt 表示 class="s_ipt" 的元素 详细的表示:  //*[@class='s_ipt']

    5、CSS和XPATH的区别-css简洁,更快,不能text定位,xpath功能更强大

    • 两者作用都是一样的,前端工程师用得到,xpath测试领域用的多
    • css更简洁,更快
    • css不能文本定位
    • XPATH的功能更强大

    6、什么时候元素属性值可能会变化,怎么确定?

    • 1、 多刷新几次页面,看属性值会不会变
    • 2、 id='kw1' 属性里面有数字
    • 3、 属性中有莫名其妙字符串
    • 4、 active hidden,如  class= "s_ipt active"

    7、等待-强制等待,隐性等待(每次用),显性等待(什么时候需要用)

    强制等待:等久了,浪费时间, 等时间短了,还没来

    # 强制等待
    import time
    time.sleep(3)

    隐形等待:

    • 只要是查找元素, 每一次查找元素,都有 8s 时间, 如果超过8s, 元素还没出现,就会报错。
    • 非常智能 , 什么时候能找到,什么时候继续执行。
    • 全局设置,只需要设置一次,使用简单
    # 隐性等待
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    # 设置 8s 隐性等待
    browser.implicitly_wait(8)

    显性等待:

    可以控制条件: 等待某个元素可以被点击了, 可以被看见了等等。

    # 显性等待 等待完成后再写执行代码
    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions
    from selenium.webdriver.support.wait import WebDriverWait
    
    browser = webdriver.Chrome()
    # 显性等待,设置等待,传递浏览器和超时时间
    wait = WebDriverWait(browser, timeout=8)
    # 定位元素方法
    locator = ('xpath', '定位xpath的表达式')
    # 等待条件可点击
    when = expected_conditions.element_to_be_clickable(locator)
    wait.until(when)
    
    
    # 定位搜索结果的元素
    el = browser.find_element('xpath', '定位xpath的表达式')
    el.click()
    
    broswer.quit()

     8、五种显性等待条件

    • 等待页面标题 
    # 等待title是否显示
    wait1 = WebDriverWait(driver, timeout=5)
    when1 = expected_conditions.title_is("百度一下,你就知道")
    wait1.until(when1)
    • 等待页面url
    # 等待url是否加载
    wait = WebDriverWait(driver, timeout=5)
    when = expected_conditions.url_contains("https://www.baidu.com/")
    wait.until(when)
    • 等待元素是否被加载-等同于隐性等待
    # 等待是否可见-同隐性等待
    # dom中存在,但是不一定可见
    # 初始化一个定时器
    wait3 = WebDriverWait(driver, timeout=5)
    locator = (By.ID, 'kw')
    when3 = expected_conditions.presence_of_element_located(locator)
    # 条件是否满足
    wait3.until(when3)
    • 等待元素是否可见 -

      when4 = expected_conditions.visibility_of_element_located(locator)

    • 等待元素是否点击-

        when2 = expected_conditions.element_to_be_clickable(locator)

  • 相关阅读:
    Coursera课程《Python数据结构》中课件
    Coursera课程《Python数据结构》中课程目录
    Coursera课程《大家的编程》(Python入门)中课程目录
    Python for everyone chapter 1
    Coursera课程《大家的python》(Python for everyone)课件
    Coursera课程《大家的Python》中一些资料
    局部敏感哈希 Kernelized Locality-Sensitive Hashing Page
    CVPR14 图像检索papers
    Sequential projection learning for hashing阅读笔记
    Hashing图像检索源码及数据库总结
  • 原文地址:https://www.cnblogs.com/shishibuwan/p/16031410.html
Copyright © 2020-2023  润新知