windows环境搭建css
# 下载 python【python 开发环境】 http://python.org/getit/
# 下载 setuptools 【python 的基础包工具】setuptools 是 python 的基础包工具,能够帮助咱们轻松的下载,构建,安装,升级,卸载 python的软件包。 http://pypi.python.org/pypi/setuptools
# 下载 pip 【python 的安装包管理工具】pip 是python软件包的安装和管理工具, 有了这个工具, 咱们只须要一个命令就能够轻松的python 的任意类库。 https://pypi.python.org/pypi/pip
selenium2 python自动化测试.pdf html
http://pan.baidu.com/s/1c249j9I
知识点与坑爹记录:前端
一、webdriver的find_element_by_css_selector 不支持:first 和 :last选择器。但支持nth-child(n) 和 属性选择器等 css选择器耶!python
二、通过一系列试验,firefox浏览器保持52版本能解决大部分的问题。
mysql
三、进入 C:\Windows\System32\drivers\etc 查看houst 你的 localhost 是否是 127.0.0.1c++
四、多行字符串变量能够用'''xxxxx''' 来定义git
五、正则表达式,千万不要使用re.match,简直是坑爹,应该用re.search来使用正则表达式。github
http://www.runoob.com/python/python-reg-expressions.htmlweb
re.match只匹配字符串的开始,若是字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。正则表达式
abc = re.search('(^<option)(.*)四川省(</option>)$', aa, re.M|re.I) print(abc) if abc: print('OK')
六、关于lambda表达式的一个技巧,可使用or或者and来组合。而lambda最终返回的,是最后一个表达式,譬如这样:
g = lambda x: 1==1 and x + 1 g(1) // => 2
能够看出,and后面的会做为返回值。因此咱们能够借用这点搞事情。
七、神级坑爹API: find_elements_by_css_selector 和 find_element_by_css_selector 你看的出这二者的区别么? 前者能够返回多个WebElement对象。因此他可使用len(xxxxx)。然后者因为不具有,会报【“TypeError: object of type 'FirefoxWebElement' has no len()”】。因此使用前者才是正确的。
八、宙斯级别的坑爹bug修补记录:(帮春梅解决HTMLTestRunner的问题,为何个人代码运行好好的,一到他那就出事了?)
缘由是目前捕捉到是由于pycharm致使的。确定是进行了什么配置,才会致使出现问题。若是我使用命令行python xxx.py的方式温如狗!
这就能解释为何有一些代码以很是崎岖怪异的方式运行。(譬如类直接运行?不须要调用和实例化?PY傻逼了?在逗开发者?)
不知其它代码问题是否正常,暂时先解决HTMLTestRunner 。
第一步、安装 python 的开发环境
python2.7.5版本,安装目录为:C:\Python27
添加一下 python 的环境变量吧!桌面“个人电脑”
右键菜单-->属性-->高级-->环境变量-->系统变量中的添加Path
一、C:\Python27
二、 C:\Python27\Scripts
第二步、安装 pip
解压pip-9.0.1.tar.gz, 打开命令提示符 (开始--运行--cmd 命令, 回车) 进入 pip-9.0.1目录下输入:
python setup.py install
再切换到 C:\Python27\Scripts 目录下输入:
./easy_install pip
第三步、安装 selenium
在 C:\Python27\Scripts 下输入命令安装:
./pip install -U selenium
进入python命令行,使用from selenium import webdriver 测试咱们的 selenium 安装是否成功。没有报错则是成功:
第四步、下载firefox火狐浏览器,尽可能低版本,推荐52.0便可。兼容性较强,不必追求高版本.更关键是,我踩太低版本如47的坑和最高版本58的坑。
才发现52这个版本比较安全。
http://ftp.mozilla.org/pub/firefox/releases/52.0/win64/zh-CN/
第五步:下载geckodriver.exe
https://github.com/mozilla/geckodriver/releases
放在C:\Python27(查看环境变量path中是否添加C:\Python27该路径)
进入 C:\Windows\System32\drivers\etc 查看houst 你的 localhost 是否是 127.0.0.1
进入 C:\Windows\System32\drivers\etc 查看houst 你的 localhost 是否是 127.0.0.1
进入 C:\Windows\System32\drivers\etc 查看houst 你的 localhost 是否是 127.0.0.1
第一个自动化测试demo
# 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()
输入完成后命令为 baidu.py 保存, 按 F5 快捷键运行脚本, 将看到脚本启动 Firefox 浏览器进入百度页,输入“selenium” 点击搜索按钮,最后关闭浏览器的过程。 (这里默认读者已经安装了 Firefox 浏览器)
事实上不止是火狐,IE(edge)、chrome、Safari 等浏览器均可以被支持,只须要下载对应的Driver而且放置在C:\Python27(查看环境变量path中是否添加C:\Python27该路径), 就可使用了。各类Driver下载地址以下:
http://seleniumhq.github.io/selenium/docs/api/py/#drivers
下面演示如下使用Chrome浏览器进行自动化测试:
chromeDriver下载地址
https://sites.google.com/a/chromium.org/chromedriver/downloads
老规矩:下载好chrome浏览器,将chromeDriver放置再C:\Python27中
而后将上面代码中的 Firefox() 换成 Chrome() ,而后F5运行测试一下。发现此次是chrome浏览器来运行自动化测试了
查看python官方文档和第三方API文档的方法:
http://www.cnblogs.com/paisen/p/3298269.html
# 打开cmd命令行,输入: python -m pydoc -p 6634
打开浏览器:localhost:6666 能够看到大量的文档
往下滑动,能够看到各类各样的目录。找到相似 C:\python27\lib\site-packages 的地方,就是咱们的第三方文档了,其中包括咱们刚刚下载的selenium
API浏览器篇
一、浏览器最大化
在统一的浏览器大小下运行用例,能够比较容易的跟一些基于图像比对的工具进行结合,提高测试的
灵活性及广泛适用性。好比能够跟 sikuli 结合,使用 sikuli 操做 flash。
#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") print "浏览器最大化" driver.maximize_window() #将浏览器最大化显示
# driver.quit()
二、设置浏览器宽、高
在不一样的浏览器大小下访问测试站点,对测试页面截图并保存,而后观察或使用图像比对工具对被测
页面的前端样式进行评测。好比能够将浏览器设置成移动端大小(320x480),而后访问移动站点,对其样
式进行评估;
#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://m.mail.10086.cn") #参数数字为像素点 print "设置浏览器宽480、高800显示" driver.set_window_size(480, 800) # driver.quit()
三、控制浏览器前进、后退
浏览器上有一个后退、前进按钮,对于浏览网页的人是比较方便的;对于 web 自动化测试来讲是
一个比较难模拟的操做; webdriver 提供了 back()和 forward()方法, 使实现这个操做变得很是简单。
#coding=utf-8 from selenium import webdriver import time driver = webdriver.Firefox() #访问百度首页 first_url= 'http://www.baidu.com' print "now access %s" %(first_url) driver.get(first_url) #访问新闻页面 second_url='http://news.baidu.com' print "now access %s" %(second_url) driver.get(second_url) #返回(后退)到百度首页 print "back to %s "%(first_url) driver.back() #前进到新闻页 print "forward to %s"%(second_url) driver.forward() # driver.quit()
API对象定位篇
webdriver 提供了一系列的元素定位方法,经常使用的有如下几种
id
name
class name
tag name
link text
partial link text
xpath
css selector
分别对应 python 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()
一、id 和 和 name 定位
id 和 name 是咱们最经常使用的定位方式, 由于大多数元素都有这两个属性, 并且在对控件的 id 和 name
命名时通常使其有意义也会取不一样的名字。经过这两个属性使咱们找一个页面上的属性变得至关容易。
<input id="gs_htif0" class="gsfi" aria-hidden="true" dir="ltr"> <input type="submit" name="btnK" jsaction="sf.chk" value="Google 搜索"> <input type="submit" name="btnI" jsaction="sf.lck" value=" 手气不错 ">
经过元素中所带的 id 和 name 属性对元素进行定位:
id=” gs_htif0 ” find_element_by_id(" gs_htif0 ") name=”btnK” find_element_by_name("btnK") name=”btnI” find_element_by_name("btnI")
二、tag name 和 和 class name 定位
不是全部的前端开发人员都喜欢为每个元素添加 id 和 name 两个属性,但除此以外你必定发现了一
个元素不仅仅只有 id 和 name,它还有 class 属性;并且每一个元素都会有标签。
<div id="searchform" class="jhp_big" style="margin-top:-2px"> <form id="tsf" onsubmit="return name="f" method="GET" action="/search"> <input id="kw" class="s_ipt" type="text" name="wd" autocomplete="off">
经过元素中带的 class 属性对元素进行定位:
class=”jhp_big” find_element_by_class_name("jhp_big") class=”s_ipt” find_element_by_class_name("s_ipt")
经过 tag 标签名对对元素进行定位:
<div> find_element_by_tag_name("div") <form> find_element_by_tag_name("form") <input> find_element_by_tag_name("input")
tag name 定位应该是全部定位方式中最不靠谱的一种了,由于在一个页面中具备相同 tag name 的元
素极其容易出现。
三、link text 与 与 partial link text 定位
有时候须要操做的元素是一个文字连接, 那么咱们能够经过 link text 或 partial link text 进行元素
定位。
<a href="http://news.baidu.com" name="tj_news">新 闻</a> <a href="http://tieba.baidu.com" name="tj_tieba">贴 吧</a> <a href="http://zhidao.baidu.com" name="tj_zhidao">一个很长的文字链接</a>
经过 link text 定位元素:
find_element_by_link_text("新 闻")
find_element_by_link_text("贴 吧")
find_element_by_link_text("一个很长的文字链接")
通 partial link text 也能够定位到上面几个元素:
find_element_by_partial_link_text("新")
find_element_by_partial_link_text("吧")
find_element_by_partial_link_text("一个很长的")
当一个文字链接很长时,咱们能够只取其中的一部分,只要取的部分能够惟一标识元素。通常一个页
面上不会出现相同的文件连接,经过文字连接来定位元素也是一种简单有效的定位方式。
下面介绍 xpath 与 CSS 定位相比上面介绍的方式来讲比较难理解,但他们的灵活性与定位能力比上
面的方式要强大。
四、xpath定位
XPath 扩展了上面 id 和 name 定位方式,提供了不少种可能性,好比定位页面上的第三个多选框。
<html class="w3c"> <body> <div class="page-wrap"></div> <div id="hd" name="q"> <form target="_self" action="http://www.so.com/s"> <span id="input-container"> <input id="input" type="text" x-webkit-speech="" autocomplete="off" suggestwidth="501px" /> </span> </form> </div>
绝对路径定位:
find_element_by_xpath(" /html/body/div[2]/form/span/input ")
在浏览器F12的console中,使用$x("/html/body/div[2]/form/span/input") 能够测试
相对路径定位:
find_element_by_xpath(" //input[@id=’input’] ") #经过自身的 id 属性定位
find_element_by_xpath(" //span[@id=’input-container’]/input ") #经过上一级目录的id属性定位
find_element_by_xpath(" //div[@id=’hd’]/form/span/input ") #经过上三级目录的 id 属性定位
find_element_by_xpath(" //div[@name=’q’]/form/span/input ")#经过上三级目录的 name 属性定位
经过上面的例子,咱们能够看到 XPath 的定位方式很是灵活和强大的,并且 XPath 能够作布尔逻辑运
算,例如://div[@id=’hd’ or @name=’q’]
值得一提的是xpath的获取能够经过chromeF12,elements中的源代码右键->copy->copy Xpath
或者firefox浏览器的firebug工具中Copy Xpath 获取
五、CSS选择器
没啥好说的。最灵活经常使用的选择器,详情请自行学习CSS相关资料
API操做对象篇
前面讲到了很多知识都是定位对象,定位只是第一步,定位以后须要对这个对象进行操做。鼠标点击
呢仍是键盘输入,这要取决于咱们定位的对象所支持的操做。
通常来讲,全部有趣的操做与页面交互都将经过 WebElement 接口,包括上一节中介绍的对象定位,
以及本节中须要介绍的常对象操做。
webdriver 中比较经常使用的操做元素的方法有下面几个:
clear 清除元素的内容,若是能够的话
send_keys 在元素上模拟按键输入
click 单击元素
submit 提交表单
360云盘登录实例
#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("https://eyun.360.cn/") driver.find_element_by_class_name("quc-input-account").clear() driver.find_element_by_class_name("quc-input-account").send_keys("13713332652") driver.find_element_by_class_name("quc-input-password").clear() driver.find_element_by_class_name("quc-input-password").send_keys("123456789") driver.find_element_by_class_name("quc-submit").click() #经过 submit() 来提交操做 #driver.find_element_by_id("dl_an_submit").submit() # driver.quit()
WebElement 接口经常使用方法
WebElement 接口 除了咱们前面介绍的方法外 ,它还包含了别一些有用的方法。下面,咱们例举例几
个比较有用的方法。
size 返回元素的尺寸。例:
#返回百度输入框的宽高 size=driver.find_element_by_id("kw").size print size
text 获取元素的文本,例:
#返回百度页面底部备案信息 text=driver.find_element_by_id("cp").text print text
get_attribute(name) 得到属性值。例:
须要说明的是这个方法在定位一组时将变得很是有用,后面将有运行的实例。
#返回元素的属性值,能够是 id、name、type 或元素拥有的其它任意属性 attribute=driver.find_element_by_id("kw").get_attribute('type') print attribute
is_displayed() 设置该元素是否用户可见。例:
#返回元素的结果是否可见,返回结果为 True 或 False result=driver.find_element_by_id("kw").is_displayed() print result
WebElement 接口的其它更多方法请参考 webdriver API。
鼠标事件
前面例子中咱们已经学习到能够用 click()来模拟鼠标的单击操做,而咱们在实际的 web 产品测试中
发现,有关鼠标的操做,不仅仅只有单击,有时候还要和到右击,双击,拖动等操做,这些操做包含在
ActionChains 类中。
ActionChains 类鼠标操做的经常使用方法:
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停在一个元素上
click_and_hold() 按下鼠标左键在一个元素上
等待某个元素直到出现,而后再操做或者进一步逻辑判断
http://localhost:6634/selenium.webdriver.support.wait.html#WebDriverWait
一、等待而且直接操做
from selenium.webdriver.support.wait import WebDriverWait WebDriverWait(driver, 10).until(lambda x: x.find_element_by_xpath('/html/body/div[4]/div[1]/div/ul/li[3]/ul/li[2]/a')).click()
二、等待结果而且返回bool
is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id("someId").is_displayed())
python 和 mysql链接
虫师教程:http://www.cnblogs.com/fnng/p/3565912.html
第一步,下载源代码:
# 请下载zip源代码,这样才能够编译
https://pypi.python.org/pypi/MySQL-python/1.2.5
# 个人版本从2.7升级到3.5.2的时候,上面那个就无效了。我使用了这个
https://pypi.python.org/pypi/PyMySQL
第二步,解压而且进入目录,输入编译命令:python setup.py install
若是编译有问题,根据指示解决
1、如须要c++: https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266 2、若是出现这个错误:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory error: command 'C:\\Users\\qinwanxia\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\cl.exe' failed with exit status 2 须要下载并安装MySQL connector 32位,系统是64位的也须要安装32位:
https://dev.mysql.com/downloads/connector/c/6.0.html#downloads
第三步,进入python命令行模式,检查是否包是否可引用:
python
import MySQLdb
第四步,在程序中使用mysql:
五,python 操做mysql数据库基础 复制代码 #coding=utf-8 import MySQLdb conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='123456', db ='test', ) cur = conn.cursor() #建立数据表 #cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))") #插入一条数据 #cur.execute("insert into student values('2','Tom','3 year 2 class','9')") #修改查询条件的数据 #cur.execute("update student set class='3 year 1 class' where name = 'Tom'") #删除查询条件的数据 #cur.execute("delete from student where age='9'") cur.close() conn.commit() conn.close()
获取元素的html内容
# 这是一个select元素
a = driver.find_element_by_id("model_tb_car_personal_current_sheng")
# 获取元素的html代码 print(a.get_attribute('innerHTML'))
# 很奇怪的,竟然经过这个能够获取到option的数量 print(a.get_attribute('length'))