• WebDriver API元素定位


    WebDriver属于Selenium体系中设计出来操作浏览器的一套API,
    站在WebDriver的角度, 因为它针对多种编程语言都实现了一遍这套API,所以它可以支持多种编程语言;
    站在编程语言的角度,WebDriver是Python的一个用于实现Web自动化的第三方库。
     
    一、元素定位
    正常一个页面包含的元素,有输入框、按钮、文本链接、图片等,自动化要做的就是模拟鼠标和键盘来操作这些元素,单击、输入或鼠标悬停。
    而操作这些元素的前提是我们需要找到它们,
    WebDriver提供了八种元素定位方法,在Python语言中对应的方法如下:
     
    属性
    方法
    ID
    find_element_by_id('xx')
    name
    find_element_by_name('xx')
    class
    find_element_by_class_name('xx')
    tag
    find_element_by_tag_name('xx')
    link
    find_element_by_link_text()
    partial linke
    find_element_by_partial_link_text()
    xpath
    find_element_by_xpath()
    css selector
    find_element_by_css_selector()
    ID、name、class、tag
     
     
    link
    用于定位页面上的文本链接,如百度<a class="" href="">贴吧</a>,那么link定位:find_element_by_link_text("贴吧")
     
    partial link
    定位是对link的补充,可以去文本链接的一部分定位,如百度<a class="" href="">贴吧</a>,那么link定位:find_element_by_link_text("贴")或者find_element_by_link_text("吧")
     
    XPath
    在XML文档中定位元素的语言,可以利用绝对路径定位、元素属性定位、层级与属性结合,
        绝对路径,如百度首页的输入框driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/span/input")——浏览器及版本不同,xpath的绝对路径可能不同,可以直接在浏览器F12定位到右键复制xpath;
        元素属性定位,如百度的搜索按钮driver.find_element_by_xpath("//*[@id='su']");
     
    css selector
    定位页面的css元素
    • find_element_by_css_selector("."),通过class属性定位
    • find_element_by_css_selector("#"),通过id属性定位
    • find_element_by_css_selector("input")直接通过标签名定位,但是同一标签名在页面上重复的几率很大,很难被定位到想要的元素
    为了通过标签定位提升被找到的成功率,有以下几个方法,{1.通过父子关系定位;2.通过属性定位;3.组合定位}
    • 父子关系定位,find_element_by_css_selector("span>input")
    • 属性定位,find_element_by_css_selector("[name='kw']")
    • 组合定位,find_element_by_css_selector("span.bg s_btn_wr>input#su"),有个父元素标签是span,它的class属性是bg s_btn_wr,子元素标签名是input,id是su
     
    以上可以发现,XPath和css selector两种方法整合了id、class等查找方式
     
    定位方式
    XPath
    css selector
    标签
    //div
    div
    By id
    //div[@id='']
    div#
    By class
    //div[@class='']
    div.
    By 属性
    //div[@title='']
    div[title=]
    定位子元素
    //div[@id='']/*
    div#h1>*
     
    还有一种写法find_element(self,by,value),用by元素定位
    find_element(By.id,"xx")
    find_element(By.NAME,"xx")
    ...
     
     
    在driver.find的时候出现的代码提示,发现find_elements和find_element一样也有8种方法,其作用用于定位一组元素,通常在页面勾选复选框或直接获取一组元素再筛选出来。
    #找出页面上所有tag name为input的元素
    inputs = driver.find_elements_by_tag_name('input')
     
    #从中过滤出type为CheckBox的元素
    for i in inputs:
        if i.get_attribute('type') == 'checkbox'
            i.click()
     
     
    当需要定位的元素存在于多个表单中,则需要switch_to.frame()方法切换
    #切换到iframe=a的表单
    driver.switch_to.frame("a")
    #跳出当前一级
    driver.switch_to.parent_frame()
     
  • 相关阅读:
    CEF解决加载慢问题
    CEF之CefSettings设置locale
    Win32程序支持命令行参数的做法(转载)
    VC++实现程序重启的方法(转载)
    CEF之CefSettings设置日志等级
    libcurl开源库在Win32程序中使用下载文件显示进度条实例
    libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)
    使用ShellExecute打开目标文件所在文件夹并选中目标文件
    linux下gimp的使用
    linux下的chm阅读器?
  • 原文地址:https://www.cnblogs.com/zxylock/p/9342482.html
Copyright © 2020-2023  润新知