Web自动化测试框架Selenium在Python中的使用

Posted ProChick

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web自动化测试框架Selenium在Python中的使用相关的知识,希望对你有一定的参考价值。

1.什么是Selenium?

  • Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一。它最初由杰森·哈金斯(Jason Huggins)于2004年开发,作为Thought Works的内部工具。
  • Selenium支持跨不同浏览器,平台和编程语言的自动化。
  • Selenium可以轻松部署在Windows,Linux,Solaris和Macintosh等平台上。此外,它支持ios(IOS,Windows Mobile和android)等移动应用程序的OS(操作系统)。
  • Selenium通过使用特定于每种语言的驱动程序支持各种编程语言。Selenium支持的语言包括C#,Java,Perl,php,Python和Ruby。
  • Selenium支持的浏览器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。

2.它有哪些特点?

  • 开源软件:源代码开放可以根据需要来增加工具的某些功能
  • 跨平台:linux 、windows 、mac
  • 核心功能:就是可以在多个浏览器上进行自动化测试
  • 多语言:Java、Python、C#、javascript、Ruby等
  • 成熟稳定:目前已经被google , 百度, 腾讯等公司广泛使用
  • 功能强大:能够实现类似商业工具的大部分功能,因为开源性,可实现定制化功能

3.测试工具WebDriver

  • Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具
  • 它提供了一套友好的API
  • Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动
  • WebDriver支持的浏览器有 Firefox 、IE、Opera、Chrome、safari、htmlUnit

4.浏览器相关测试操作

  • maximize_window

    # 最大化浏览器
    driver = webdriver.Chrome()
    driver.maximize_window()
    
  • refresh

    # 刷新浏览器
    driver = webdriver.Chrome()
    driver.refresh()
    
  • close

    # 关闭某个浏览器窗口
    driver = webdriver.Chrome()
    driver.close()
    
  • quit

    # 关闭浏览器所有窗口
    driver = webdriver.Chrome()
    driver.quit()
    
  • title

    # 获取浏览器当前窗口的标题
    driver = webdriver.Chrome()
    print(driver.title)
    
  • current_url

    # 获取浏览器当前窗口的URL
    driver = webdriver.Chrome()
    print(driver.current_url)
    

5.HTML元素的定位操作

  • id

    # 通过元素ID属性进行定位
    driver.find_element_by_id()
    
  • name

    # 通过元素name属性进行定位
    driver.find_element_by_name()
    driver.find_elements_by_name()
    
  • class_name

    # 通过元素class属性进行定位
    driver.find_element_by_class_name()
    driver.find_elements_by_class_name()
    
  • tag_name

    # 通过元素标签名进行定位
    driver.find_element_by_tag_name()
    driver.find_elements_by_tag_name()
    
  • link_text

    # 通过超文本链接元素<a></a>的文本进行精准定位
    driver.find_element_by_link_text()
    driver.find_elements_by_link_text()
    
  • partial_link_text

    # 通过超文本链接元素<a></a>的文本进行模糊定位
    driver.find_element_by_partial_link_text()
    driver.find_elements_by_partial_link_text()
    
  • xpath

    # 通过绝对定位进行定位
    driver.find_element_by_xpath("/html/body/div/p[2]")
    # 通过相对定位进行定位
    driver.find_element_by_xpath("//input[@id='username']")
    # 通过元素属性进行定位
    driver.find_element_by_xpath("//*[@name='hobby'] ")
    # 通过层级与属性结合进行定位
    driver.find_element_by_xpath("//*[@id='myfrom']/input")
    # 通过属性与逻辑结合进行定位
    driver.find_element_by_xpath("//*[@id='password' and @name='password']")
    
  • css

    # 通过id进行定位
    driver.find_element_by_css_selector("#username")
    # 通过clss进行定位
    driver.find_element_by_css_selector(".username")
    # 通过元素进行定位
    driver.find_element_by_css_selector("input")
    # 通过属性进行定位
    driver.find_element_by_css_selector("[type='hidden']")
    # 通过层级选择器进行定位
    driver.find_element_by_css_selector("p>input")
    

6.HTML元素的获取操作

  • send_keys

    # 输入元素的文本
    username = driver.find_element_by_id("username")
    username.send_keys("zhangsan")
    
  • clear

    # 清除元素的文本
    username = driver.find_element_by_id("username")
    username.clear()
    
  • click

    # 单击元素
    button = driver.find_element_by_id("btn")
    button.click()
    
  • size

    # 获取元素的大小
    username = driver.find_element_by_id("username")
    print(username.size)
    
  • text

    # 获取元素的文本
    username = driver.find_element_by_id("username")
    print(username.text)
    
  • get_attribute

    # 获取元素的属性
    img = driver.find_element_by_id("picture")
    img.get_attribute("src")
    

7.HTML元素的等待操作

WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程

  • 显示等待

    显式等待作用于单个元素, 方法封装在WebDriverWait类中

  • 隐式等待

    隐式等待作用于全局元素, 方法直接通过浏览器实例化对象调用

    • 如果定位某一元素定位失败,那么就会触发隐式等待有效时长
    • 如果在指定时长内加载完毕,则继续执行
    • 否则抛出NoSuchElementException异常,如果元素在第一次就定位到则不会触发隐式等待时长
    driver.implicitly_wait(10)
    

8.鼠标相关测试操作

  • context_click

    from selenium.webdriver.common.action_chains import ActionChains
    
    username = driver.find_element_by_id("username")
    
    action = ActionChains(driver)
    # 鼠标右键点击
    element = action.context_click(username)
    # 执行
    element.perform()
    
  • double_click

    from selenium.webdriver.common.action_chains import ActionChains
    
    username = driver.find_element_by_id("username")
    
    action = ActionChains(driver)
    # 鼠标双击
    element = action.double_click(username)
    # 执行
    element.perform()
    
  • drag_and_drop

    from selenium.webdriver.common.action_chains import ActionChains
    
    div1 = driver.find_element_by_id("div1")
    div2 = driver.find_element_by_id("div2")
    
    action = ActionChains(driver)
    # 鼠标拖拽
    element = action.drag_and_drop(div1, div2)
    # 执行
    element.perform()
    
  • move_to_element

    from selenium.webdriver.common.action_chains import ActionChains
    
    img = driver.find_element_by_id("picture")
    
    action = ActionChains(driver)
    # 鼠标悬停
    element = action.move_to_element(img)
    # 执行
    element.perform()
    

9.键盘相关测试操作

from selenium.webdriver.common.keys import Keys

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)

以上是关于Web自动化测试框架Selenium在Python中的使用的主要内容,如果未能解决你的问题,请参考以下文章

Selenium3与Python3实战 Web自动化测试框架

Selenium3与Python3实战 Web自动化测试框架

Python + Selenium,分分钟搭建 Web 自动化测试框架!

selenium+python做web端自动化测试框架与实例详解教程

Selenium基于Python web自动化基础二 -- 免登录等待及unittest单元测试框架

Selenium3与Python3实战 Web自动化测试框架