前段时间,笔者忙于应付公司组织的雅思考试,白天.晚上但凡有空,笔者都是埋头伏案,啃剑桥雅思(剑4~剑12)的官方模拟题或者做着与雅思考试相关的准备工作,这个过程持续了40余天.最近总算鼓起勇气走进考场,跟那些尚未毕业.怀揣出国梦想的小年轻同场竞争,虽然结果还未出来,但是至少短时间不用再高强度复习英语了,笔者工作重心得以回归到Python +Selenium的自动化中. 言归正传,笔者这次准备利用JavaScript来修改页面节点的属性,方便selenium传参.具体案例是这样的: 下图所示的页面…
第一个自动化脚本(用Python写的) from selenium import webdriver  #从selenium导入webdriber driver=webdriber.Firefox()   #打开Firefox软件 driver.get("http://baidu.com")   #在Firefox的URL里输入百度,打开百度页面 driver.find_element_by_id("kw").send_key("selenium"…
webdriver提供了操作浏览器的前进和后退的方法,但是对于浏览器公东条并没有提供相应的操作方法.于是就需要借助JavaScript来控制浏览器的滚动条.webdriver提供了execute_sript()方法来执行JavaScript代码. 一般必须使用滚动条的场景是:注册时的法律文件条文阅读.判断用户是否阅读完的标准是:滚动条是否拉倒页面底部.为了使操作更接近用户行为也会使用滚动条,例如用户操作的元素在页面的第二屏,一般用户不会对看不到的元素进行操作,那么需要现将滚动条拖动到页面的第二屏…
# -*- coding: utf-8 -*- from selenium import webdriver import selenium.webdriver.support.ui as ui from selenium.webdriver.common.keys import Keys def test1(): DEMO_PAGE = 'http://www.court.gov.cn/zgcpwsw/Html_Pages/eae8/eae8166f-1c9e-4a03-a10d-b86dde…
#coding=utf-8from selenium import webdriverimport timeimport osos.environ["webdriver.firefox.driver"]="C:\Program Files\Mozilla Firefox\firefox.exe" driver=webdriver.Firefox(executable_path='c:\\geckodriver')driver.get("http://www…
继续接着介绍,如何利用unittest管理和执行测试用例的问题,这里我们还是利用之前已经有的三条测试用例,如果你跳过了前面文章,请回到框架设计篇的第八篇和第七篇,里面有相关测试类的文件.本文来介绍,如果利用discover()方法去加载一个路径下所有的测试用例.这个方法是不是太适合我们现在的需求,例如我只需要跑testsuite包下所有测试用例,不管在里面有多少个包和多少个测试类,只需要用discover()搞定,来看看这个场景下TestRunner.py如何写. # coding = utf-…
本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这个测试脚本有一个测试用例,加上前面的测试脚本,一共就是三个测试用例,前面那个测试类里面包括两个测试用例. 新建的测试脚本,test_get_page_title.py代码如下: # coding = utf-8 import unittest from framework.browser_engin…
JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互.那么js能做的事,Selenium应该大部分也能做.WebDriver是模拟终端用户的交互,所以就不能点击不可见的元素,有时可见元素也不能点击.在这些情况下,我们就可以通过WebDriver 执行JavaScript来点击或者执行页面元素.本文将介绍如何使用WebDriver执…
在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及其他的细节问题.而除了defer和async特性,动态脚本和Ajax脚本注入也是两种常用的创建无阻塞脚本的方法.总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方…
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第四篇博文 二.Selenium前三篇博文地址: [Selenium01篇]python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作! [Selenium02篇]python+selenium实现Web自动化:鼠标操作和键盘操作! [Selenium03篇]…
记一次python + selenium小项目出现的问题与解决办法 如何接入代理 def crawl_xdaili(self):#代理 可不用 需要时 解除注释 """ 获取讯代理 :return: 代理 """ url = '寻代理的api接口 自己去讯代理官网' r = requests.get(url) if r: result = json.loads(r.text) proxies = result.get('RESULT') for…
常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用上. 主要做数据挖掘算法的研究,应该会处理大量的文本. 提到文本处理,相信大部分人都会说应该用Perl.文本处理很强大,语法给人的感觉太乱了, Perl的基本语法,用它做了一些简单的文本处理工作,在Unix或 Linux上做系统管理Perl是最好的选择. Python据说吸收了Perl的一些东西,语…
Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用上.?我?主要是想做数据挖掘算法的研究,应该会处理大量的文本.提到文本处理,相信大部分人都会说应该用Perl.的确,Perl的文本处理很强大,但是它的语法?给人的感觉太乱了,我之前把Perl的基本语法学完了,也用它做了一些简单的文本处理工作…
有时候刚进入页面输入第一个值时脚本会报错:cannot focus element 贴下我的脚本和解决办法供大家参考 我原本的脚本是: WebDriverWait(driver,15,0.5).until(EC.visibility_of_element_located((By.ID,"inputCtrl0"))).send_keys(“Company”) 改为如下操作后就没有报错了: WebDriverWait(driver,15,0.5).until(EC.visibility_o…
前面文章,我们介绍了如何采用XPath表达式去定位网页元素,在掌握了如何抓取或者如何书写精确的XPath表达式后,我们可以开始写自己的第一个真正意义上的webui 自动化测试脚本,就相当于,你在学习Python,如何在控制台打印Hello,Python! 一样. 我们的测试用例是:打开百度首页,搜索Selenium,然后检查搜索列表,有没有Selenium这个官网链接选项. 在写自动化脚本之前,需要明确手动脚本的步骤,然后去拆分到具体没一个步骤做什么,考虑好了之后,才开始动手去写脚本.我把这个测…
有些浏览器的页面操作,不能依靠WebDriver提供的API来操作,需要借助JavaScript脚本. webdriver提供了execute_script()方法来执行JavaScript代码. from selenium import webdriver import time driver = webdriver.Firefox() driver.get('http://www.baidu.com') driver.set_window_size(800,700) #设置浏览器的宽和高,以…
Demo地址:https://gitee.com/chenyangqi/YouMeDai 背景介绍 在Android与JavaScript交互一文中学习了原生和JS交互,但是如果我们想和别人开发好的web页面交互呢,很明显这个web端并没有为我们定义好的jsBridge,就是很流氓的抓取其他网页的数据. 完整的案例,功能如下图,webview加载在如下网页,当用户点击获取验证码时,获取用户输入的手机码,同样在其他页面获取用户名和身份证号码. 把终获得的数据上传云服务器结果如下 实现思路 1.we…
对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.PhantomJS自带的方法支持对整个网页截屏. 下面提供几种思路. 方式一 针对WebDriver.Chrome 通过WebDriver的js脚本注入功能,曲线救国. 注入第三方html转canvas的js库(见下方推荐) 获取元素html源码 将html转换为canvas 下载canvas 优点: 截取长…
Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试.它的取名很有意思,因为当时最流行的一款自动化测试工具叫做QTP,是由 Mercury 公司开发的商业应用.Mercury 是化学元素汞,而 Selenium 是化学元素硒,汞有剧毒,而硒可以解汞毒,它对汞有拮抗作用. Selenium 的核心组件叫做 Sele…
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API.本篇主要讲如何用Python调用webdriver框架的API,对浏览器做一些常规的操作,如打开.前进.后退.刷新.设置窗口大小.截屏.退出等操作. 2.1.1 打开网页 1.从selenium里面导入webdriver模块2.打开Firefox…
先在首页上执行一段 JavaScript 脚本,将页面的滚动条拖到最下方,然后再拖回顶部,最后才截图.这样可以解决那种按需加载图片的情况 以下代码为转载别处博客改造后的,有chrome和ff两种浏览器. 由于webdriver.chrom只能截取当前页面图片,不能截取整个网页图片,因此额外使用webdriver.PhantomJS,需要下载PhantomJS,将PhantomJS.exe放到python的script目录下 from selenium import webdriver impor…
感谢:小琰子 Python+Selenium 脚本中的一些js的用法汇总: 1.滚动条 driver.set_window_size(500,500) js = "window.scrollTo(0,200)" #左:距左边横滚.右:距上边竖滚driver.execute_script(js) 2.获取元素的值 button = driver.find_element_by_css_selector("#su") #定位按钮 input = driver.find_…
JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制, 被称为“some-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容作了很重要的限制, 即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多Iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com 下的页面中包含的JavaScript的代码,不…
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入,由于本人主要是搞java web开发的小程序员,所以这里我只讲一下有关于java web的防止办法.其实对于其他的,思路基本相似.下面我们先从web应用程序的角度来看一下如何避免sql注入: 1.普通用户与系统管理员用户的权限要有严格的区分.   如果一个普通用户在使用查询语句中嵌入另一个Drop …
使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)报错. 原因:编码未进行转换. 解决方式:print时,在后面加上encode("utf-8")即可. 例如: tx = driver.find_element_by_xpath(".//*[@id='1']/…
Why Automation Testing 现在似乎大家都一致认同一个项目应该有足够多的测试来保证功能的正常运作,而且这些此处的‘测试’特指自动化测试:并且大多数人会认为如果还有哪个项目依然采用人工测试来保证代码的正确性的话,那简直是太落后了,太不可思议了. 但是在我现在的项目里,之前大部分的情况下我们还是在使用手动测试,项目依然在每周一次井然有序的上线着.当然有部分原因是因为项目业务和技术上的特殊性,但是这开始让我思考:我们究竟为什么要进行自动化?什么情况下该进行自动化?自动化测试使用与所有…
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdriver driver=webdriver.Firefox() driver.get(r'http://www.baidu.com/') print 'driver attributes:' print dir(driver) elem=driver.find_element_by_id('kw') pr…
前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点.应用场景和核心思想有一定的理解和掌握. 为什么要用POM 基于python selenium2开始UI级自动化测试并不是多么艰巨的任务.只需要定位到元素,执行对应的操作即可.下面我们看一下这个简单的脚本实现百度搜索. from selenium import webdriver import time driver = webdriver.Firefox() driver.i…
在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                                                                                                     WEB自动化测试培训2 课程目的 一.Webdriver API 的使用 课程内容 1    控制浏览器 Selenium 主要提供的是操作页面上各…
python+selenium运行多次新增项目脚本(出错的元素通过by_id的方式定位),当第三次新增时报Message: element not visible的错误,加入等待时间,等页面加载完成,仍旧报相同的错误,错误如下图: 分析原因:前两次新增都是成功的,说明定位元素的代码没有问题; 加入等待时间还是报错,排除了页面没有加载完成的原因 打开开发者模式(F12),在控制台用id进行定位,发现出现了两个元素: 0:input#bankAccountType1.form-control 1:i…