美文网首页
python3使用selenium上篇

python3使用selenium上篇

作者: test小星星 | 来源:发表于2018-09-25 16:35 被阅读22次

    selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
    想了解selenium发展史点击一下。

    实例百度搜索selenium

    # 导入webdriver类
    from selenium import Webdriver
    # 调用selenium浏览器驱动,获取浏览器句柄
    driver = webdriver.Firefox()
    # 通过句柄访问URL
    first_url = 'http://www.baidu.com'
    driver.get(first_url)
    # 通过句柄控制页面元素
    driver.find_element_by_id("kw").send("selenium")  # 在搜索框输入selenium
    driver.find_element_by_id("su").click()  # 单击百度一下
    

    环境搭建

    1.安装python3
    python下载地址:https://www.pythin.org/
    2.安装selenium
    cmd命令行输入:pip install selenium

    cmd命令行输入:pip install selenium=指定版本号
    pip show selenium 查看当前包的版本信息
    3.安装浏览器驱动(WebDriver)
    驱动下载地址:http://www.seleniumhq.org/download/
    解压文件,将得到的.exe文件放到python目录下

    元素定位

    1. id定位
    通过HTML元素的ID值定位:find_element_by_id("id名称")
    2. name定位
    通过HTML元素的name属性值定位:find_element_by_name("name名称")
    3. class定位
    通过HTML元素的class值定位:find_ement_by_class_name("class名称")
    4. tag定位
    每个一个元素本质上也是一个tag,如:<div>、<input>、<a>等
    find_element_by_tag_name("input")
    5. link定位
    它专门用来定位文本链接:find_element_by_link_text("链接名")
    6. partial link定位
    parial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接。
    find_element_by_partial_link_text("一个很长的文本链接")
    7. XPath定位

    • 绝对路径定位
      find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
      div[2]表示当前层级下的第二个div标签
    • 元素属性定位
      find_element_by_xpath("//input[@id='id名称']")
      find_element_by_xpath("//input[@name='name名称']")
      find_element_by_xpath("//input[@class='class名称']")
      find_element_by_xpath("//*[@id='id名称']")
      find_element_by_xpath("//input[@type='submit']")
      说明://表示当前页面某个目录下, input表示定位元素的标签名,[@id="id名称"]表示这个元素的id属性值,如果不想指定标签名,则可以用星号(*)代替,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。
    • 层级与属性结合
      如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找其上一级元素,或上上级元素。
      find_element_by_xpath("//span[@class='class名称']/span/input")
    • 使用逻辑运算符
      如果一个属性不能唯一区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素
      find_element_by_xpath("//input[@id='值' and @class='值']/span/input")
    • 通过开发这工具(F12)定位元素复制xpath绝对路径

    8. 常用css定位

    选择器 例子 描述
    .class .temp class选择器,选择class="temp"的所有元素
    #id #kw id选择器,选择id="kw"的所有元素
    * * 选择所有元素
    element input 选择所有<input>元素
    > div>input 选择父元素为<div>的所有<input>元素,父子关系
    + div+input 选择同一级紧接在<div>元素之后的所有<input>元素 ,兄弟关系
    [attrbute=value] [type="submit"] 选择type="submit"的所有元素

    9. 用By定位元素
    针对前面介绍的8种定位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法
    find_element()方法只用于定位元素,需要两个参数,第一个参数是定位的类型,第二个参数是定位的具体方式,在使用By之前需要导入By类

    # 导入By
    from selenium.webdriver.common.by import By
    # id定位
    find_element(By.ID, "id值")
    # name属性定位
    find_element(By.NAME, "name值")
    # class属性定位
    find_element(By.CLASS_NAME, "class值")
    # 标签定位
    find_element(By.TAG_NAME, "input")
    #定位链接
    find_element(By.LINK_TEXT, "新闻")
    # 定位长链接
    find_element(By.PARTIAL_LINK_TEXT, "新")
    # xpath定位
    find_element(By.XPATH, "//*[@class='值']")
    # css定位
    find_element(By.CSS_SELECTOR, "span.class值>input#值")
    

    10. 定位一组元素
    定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多加了个s表示复数。
    用于场景:批量操作元素。
    例如,勾选页面上所有的复选框
    先获取一组元素,再从这组对象中过滤出需要操作的元素。

    # 选择页面上所有的tag_name为input的元素
    inputs=driver.find_elements_by_tag_name('input')
    # 然后从中过滤出type为checkbox的元素,单击勾选
    fro input in inputs:
        if input.get_attribute('type')== 'chexkbox':
            input.click()
    

    操作页面的方法

    1. 简单的元素操作

    • back()               后退
    • forward()              前进
    • refresh()               刷新(F5)
    • set_window_size(480*800)      设置浏览器窗口大小
    • maximize_window()         全屏显示
    • clear()               清除文本
    • send_keys("值")           模拟按键输入
    • click()               单机元素
    • submit()              用于提交表单,相当于“回车”键的操作
    • quit()               关闭所有窗口
    • close()              关闭当前窗口

    2. 获取页面信息

    • size               返回元素的尺寸
    • text               获取元素的文本内容
    • get_attribute(name)        获取属性值
    • is_displayed           判断元素是否可见 (True可见,False不可见)
    • title               获取当前页面的标题
    • current_url            获得当前页面的URL

    3. 鼠标事件

    • perform()        执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。
    • context_click()      右击
    • double_click()      双击
    • drag_and_drop      拖动
    • move_to_element()    鼠标悬停
      实例模拟右击
    # 导入提供鼠标操作的ActionChains类    
    from selenium webdriver import ActionChains
    # 定位要右击的元素
    youji=driver.find_element_by_id("xx")
    # 调用ActionChains()类,将浏览器驱动driver作为参数传入
    # context_click()方法用于模拟鼠标右击操作
    ActionChains(driver).context_click(youji).perform()
    

    4. 键盘事件

    • send_keys(Keys.BACK_SPACE)     删除键(BackSpace)
    • send_keys(Keys.SPACE)        空格键(Space)
    • send_keys(Keys.TAB)         制表键(Tab)
    • send_keys(keys.ESCAPE)       回退键(Esc)
    • send_keys(Keys.ENTER)        回车键(Enter)
    • send_keys(Keys.CONTROL,'a')     全选(Ctrl+A)
    • send_keys(Keys.CONTROL,'c')     复制(Ctrl+C)
    • send_keys(Keys.F1)          键盘F1

    接下篇

    相关文章

      网友评论

          本文标题:python3使用selenium上篇

          本文链接:https://www.haomeiwen.com/subject/bcqloftx.html