美文网首页我爱编程
Selenium+python安装及测试

Selenium+python安装及测试

作者: Kaami | 来源:发表于2018-06-27 16:17 被阅读42次

    本文参考《Selenium2 python自动化测试》一书的第二章,主要解决安装及测试过程中存在的若干问题。

    安装

    1、首先,按照书中提供的安装步骤,依次安装python2.7、setuptools、pip,并设置好相关的环境变量。

    a、python2.7可从官网下载msi安装包进行安装,安装完将C:\python27C:\python27\Scripts添加进环境变量的path中。(此处默认安装在C盘根目录,如安装在其他目录请做相应修改)打开cmd,输入python,回车。若进入python环境(即出现符号<<<),则说明python安装成功。

    b、从https://pypi.python.org/pypi/pip上下载pip,解压。打开cmd窗口,cd进入解压目录,输入python setup.py install,回车完成安装。

    c、安装setuptoolscmd下输入python -m pip install -U setuptools,回车完成安装。

    2、安装selenium

    打开cmd,输入 pip install -U selenium,回车。自动完成selenium的下载和安装,安装完成后可在C:\python27\Lib\site-packages里找到selenium的源码包位置。

    selenium简单测试

    打开pythonGUI界面IDLE(如安装了eclipse+pydev或其他pythonIDE环境,可以在其上开发代码),输入以下代码,代码的具体解析见书中。


    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    
    browser = webdriver.Firefox()
    browser.get("http://www.baidu.com")
    browser.find_element_by_id("kw").send_keys("selenium")
    browser.find_element_by_id("su").click()
    
    browser.quit()
    

    运行时若出现找不到firefox webdriver路径的错误,下载geckodriver.exe,放到C:\Python27目录下即可。若出现以下错误:

    selenium.common.exceptions.WebDriverException: Message: Unsupported Marionette protocol version 2, required 3
    

    升级到最新的Firefox版本即可。

    将代码中的Firefox改成其他浏览器如IEChrome等,需要下载对应的浏览器驱动,并指定好路径。

    IE需要下载IEDriverServer.exe,并关闭浏览器的安全设置,并在浏览器的工具->Internet选项->安全里将Internet、本地Internet、可信站点、受限站点下的启用保护模式前的勾去掉。

    Chrome需要下载chromedriver.exe,测试无误。

    关于python的webdriver API

    webdriver原理:

    1. WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driverremote server

    2. Client端通过CommandExcuter 发送HTTPRequestremote server的侦听端口(通信协议: the webriver wire protocol

    3. Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll, chromedriver.exe),来转化转化浏览器的native调用。

    webdriver api提供了web上的各种操作和分析。

    1、对象(元素)定位

    对象(元素)定位和操作是自动化测试的核心,其中操作又是建立在定位的基础上。webdriver 提供了一系列的定位手 段,包括

    • id
    • name
    • class name
    • tag name
    • link text
    • partial link text
    • xpath
    • css selector

    对应的webdriver里的函数分别为

    • find_element_by_id()
    • find_element_by_name()
    • find_element_by_class_name()
    • find_element_by_tag_name()
    • find_element_by_link_text()
    • find_element_by_partial_link_text()
    • find_element_by_xpath()
    • find_element_by_css_selector()

    idname是比较常用的定位方式。xpath定位可以借助Firefox浏览器的firebugfirepath插件,ChromeIE自带开发者工具。

    2、定位一组元素: 通过for循环实现

    3、层级定位 : 通过父元素定位子孙元素

    4、对象操作

    • click
    • send_keys
    • clear

    关于WebElement

    5、多层框架(frame)和窗口(window)的定位

    元素在frame中时,定位不到。使用driver.switch_to_frame("frame_name")之后,再进行定位

    对于window,同样可以采用driver.switch_to_window("window_name")

    driver.implicitly_wait(30)可以替代time.sleep(30)

    6、调用js方法

    driver.execute_script('document.title')

    作用:在当前窗口/框架同步执行JavaScript脚本

    7、上传文件

    定位上传按钮,通send_keys添加本地文件路径就可以了

    示例代码:

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    import os,time
    
    driver = webdriver.Firefox()
    driver.get("http://m.mail.10086.cn")
    driver.implicitly_wait(30)
    
    #登录
    driver.find_element_by_id("ur").send_keys("手机号")
    driver.find_element_by_id("pw").send_keys("密码")
    
    driver.find_element_by_class_name("loading_btn").click()
    
    time.sleep(3)
    
    #进入139网盘模块
    driver.find_element_by_xpath("/html/body/div[3]/a[9]/span[2]").click()
    time.sleep(3)
    
    #上传文件
    driver.find_element_by_id("id_file").send_keys('D:\\selenium_use_case\upload_file.txt')
    
    time.sleep(5)
    
    driver.quit()
    

    9、处理下拉框、switch_to_alert()accept()

    10、控制滚动条到底部

    #将页面滚动条拖到底部
    
    js="var q=document.documentElement.scrollTop=10000"
    
    driver.execute_script(js)
    
    time.sleep(3)
    
    #将滚动条移动到页面的顶部
    
    js="var q=document.documentElement.scrollTop=0"
    
    driver.execute_script(js)
    
    time.sleep(3)
    

    11、键盘按键、键盘组合键、send_keys()输入中文运行报错问题

    通过send_keys()调用按键:

    • send_keys(Keys.TAB) # TAB
    • send_keys(Keys.ENTER) # 回车

    键盘组合键:

    #ctrl+a 全选输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
    
    #ctrl+x 剪切输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
    

    send_keys() 输入中文运行报错问题:

    send_keys(u"输入中文"),
    

    注:字符串前加上u表示字符串为Unicode编码,Unicode为2字节长度编码,汉字即采用这种编码方式。而每次代码第一行的# --coding: utf-8 --表示UTF-8的实现方式。UTF-8是使用最广的一种unicode的实现方式,是为传输而设计的编码,表示每次传输8位数据。

    12、cookies处理

    • driver.get_cookies() 获得cookie信息
    • add_cookie(cookie_dict)cookie添加会话信息
    • delete_cookie(name) 删除特定(部分)的cookie
    • delete_all_cookies() 删除所有cookie

    13、鼠标事件

    ActionChains

    • context_click() 右击
    • double_click() 双击
    • drag_and_drop() 拖动

    需要注意的是,鼠标的操作不属于webelement的对象,而属于ActionChains 类。因此要测试鼠标的操作,需要在代码开始import进相关的包。如下:

    from selenium.webdriver.common.action_chains import ActionChains

    而后可以进行鼠标的测试,如以下代码:

    #定位到要双击的元素
    qqq =driver.find_element_by_xpath("xxx")
    #对定位到的元素执行鼠标双击操作
    ActionChains(driver).double_click(qqq).perform()
    

    关于unittest

    利用selenium IDE(集成在Firefox浏览器中),录制自动化测试脚本。学习基于unittest框架的自动化测试。

    题外:

    1、自动化测试中解决验证码问题

    让开发注释掉验证码部分代码、给测试人员留后门(设置“万能验证码”)、cookies读取验证码

    2、关于xpath可以参考
    http://www.w3school.com.cn/xpath/xpath_syntax.asp

    相关文章

      网友评论

        本文标题:Selenium+python安装及测试

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