择一个目前比较好的Web应用验收测试工具,有一定了解的人都会想到OpenQA Selenium,它能按照你设置的步骤逐步执行所有按键操作并给出执行结果,最终达到测试的目的。
将Selenium这样的Web测试框架引入到你的Web项目里,可以使你的Web功能实现可重复级测试。 在引入过程中,你不必担心编程语言或浏览器问题,因为Selenium RC支持Java、C#、Ruby等语言和IE、Firefox、Mozilla Suite等浏览器,同时还提供了一个Firefox插件Selenium IDE,它不仅能帮你记录你在页面上的操作步骤,还能执行你录制的步骤并显示执行结果了,它也可以生成相应语言的测试代码,供你在持续集成里执行。
内,Selenium也确实火了一段时间,首先是徐昊的一篇文章,引起的大家广泛关注;然后江南白衣也加入其中,并在SpringSide2。0已经全面应用Selenium(在example里有几个简单的功能测试);接下来就是Tin组织并推动的Selenium中文化项目;大半年过去了,Selenium中文化从最开始的强势出击到现在的停滞不前,其间遇到的波折和问题,我是不太了解的,不过我还是从中学到了很多东西,也开始尝试在项目中使用Selenium进行功能测试。
在使用Selenium过程中,越发发现它并不像大家吹嘘的那么强大,问题和局限性都比较多,并结合自身的实际情况,最终放弃使用Selenium。下面是本人总结出来的一些问题点,希望能作为大家选择和使用Selenium时的参考。
Selenium适合比较专业的团队使用 Selenium所提供的命令非常强大(这是缘于它有强大的XPath表达式),要让开发人员、测试人员和用户理解和应用这些常用的命令也不是易事,虽然Selenium提供了支持Firefox的IDE,但目前国内公司的内部使用的主流浏览器还是IE,外加部分遗留系统的JS存在问题(不支持Firefox),这使得推广和应用时存在阻力。 Selenium不支持动态链接按钮处理 这个问题十分烦人,导致很多地方的测试都不连贯,也无法验证一些操作是否正确,也就无法谈及自动化了;也可能是我没有掌握到Selenium处理动态链接按钮的方法。
Selenium对特别复杂的页面支持不好 如果用Selenium来测试类似登录或注册这样简单的页面时,它的确是我们的一个很好的帮手,能帮助我们处理得很好,而在处理复杂的企业应用系统页面时,它却显示是那样的弱不禁风和脆弱;同时在处理包含有大量组件需要测试的页面时,也是相当恐怖的,如果要测试10组件的相符作用关系的话,排列组合出来也是一个不小的数字,虽不复杂,但很麻烦 Selenium社区不活跃 最后,Selenium的社区不够活跃,也是我们放弃使用Selenium的原因之一。 即使Selenium Core和RC最近才发布了新版本,我也不得不说这个社区不怎么样,得不到很好的支持和帮助。
新版本也没有来带特别有效和值得一提的功能。 Selenium还需要时间来不断成长和完善,想依靠Selenium这样的工具来实现系统验收的自动化更是需要时间。
当这一天真的到来之时,我们的部分同行可能会因使用上自动验收工具而减轻工作负担,而另外部分同行可能会面临失业危机,因为他们所做的工作将会被计算机所替代。
很奇怪你为什么要问这个问题,你用selenium的话,你肯定预先知道用的是什么浏览器,因为不同的浏览器,调用的方法都不一样
#coding=utf-8
'''
Created on 2014-11-10
@author: Neo
'''
from selenium import webdriver
import os
def openBrowser():
chromedriver = "C:\Users\Sigma\AppData\Local\Google\Chrome\Application\chromedriver.exe"
if not os.path.exists(chromedriver):
chromedriver = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
os.environ["webdriver.chrome.driver"] = chromedriver
browser1 = webdriver.Chrome(chromedriver)
browser2 = webdriver.Firefox()
return browser1, browser2
def closeBrowser(browser):
browser.close()
cmd = 'taskkill /F /IM chromedriver.exe'
os.system(cmd)
b1, b2 = openBrowser()
print b1, b2
closeBrowser(b1)
b2.close()如上面的,chrome和Firefox 完全不一样的
当然结果print出来也能看得出用的是 什么浏览器
<selenium.webdriver.chrome.webdriver.WebDriver object at 0x028536F0> <selenium.webdriver.firefox.webdriver.WebDriver object at 0x02853750>
1. selenium中如果去寻找元素,而元素不存在的话,通常会抛出 导致测试失败,但有时候,我们需要去确保页面元素不存在,才是我们正确的验收条件下面的方法可以用来判定页面元素是否存在
1 public boolean doesWebElementExist(WebDriver driver, By selector)
2 {
3
4 try
5 {
6 driver.findElement(selector);
7 return true;
8 }
9 catch ( e)
10 {
11 return false;
12 }
13 }
2.一般有这样的应用场合,例如我们要验证在一个网站是否登录成功,那么可以通过判断登录之后是否显示相应元素:
WebElement linkUsername = driver.findElement(By.xpath("//a[contains(text(),"+username+")]"));
return linkUsername.isDisplayed();
这一方法的前提是:该元素之前已经存在,仅仅需要判断是否被显示。
现在存在另一种场合,页面元素并不存在,即通过driver.findElement只能在超时之后得到的异常。
因此只好通过如下方法解决:
1 boolean ElementExist (By Locator )
2 {
3 try
4 {
5 driver.findElement( Locator );
6 return true;
7 }
8 catch(org.openqa.selenium. ex)
9 {
10 return false;
11 }
12 }
但这一方法仍然不理想,有这样两个问题:
1、这一方法不属于任何一个page页,因此需要额外进行框架上的变更以支持这些功能函数,否则就必须在每一个用到该函数的page类写一遍。
2、仍然需要等到超时才能得知结果,当需要频繁使用该函数的时候会造成相当的时间浪费。
3.
类似于seleniumRC中的isTextPresent 方法
用xpath匹配所有元素(//*[contains(.,'keyword')]),判断是否存在包含期望关键字的元素。
使用时可以根据需要调整参数和返回值。
4. Xpath 多重判断
1 while(currentPageLinkNumber<MaxPage)
2 {
3 WebElement PageLink;
4 PageLink = driver.findElement(By.xpath("//a[@class = 'PageLink' and @title ='"+Integer.toString(currentPageLinkNumber+1)+"']"));
5 PageLink.click();
6 currentPageLinkNumber++;
7 //OtherOperation();
8 }
望采纳,谢谢。
读取短信需要在相应的手机上读取呀 由于工作需要,登录网站需要用到验证码。
最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码。直到这周五,才想起这事来,昨天顺利的解决了。
下面正题:Python版本:3.4.3 所需要的代码库:PIL,selenium,tesseract 先上代码:#coding:utf-8 import subprocess from PIL import Image from PIL import ImageOps from selenium import webdriver import time,os,sys def cleanImage(imagePath):image = Image.open(imagePath) #打开图片 image = image.point(lambda x: 0 if x<143 else 255) #处理图片上的每个像素点,使图片上每个点“非黑即白” borderImage = ImageOps.expand(image,border=20,fill='white') borderImage.save(imagePath) def getAuthCode(driver, url="mon/random" driver.get(captchaUrl) time.sleep(0.5) driver.save_screenshot("captcha.jpg") #截屏,并保存图片#urlretrieve(captchaUrl, "captcha.jpg") time.sleep(0.5) cleanImage("captcha.jpg") p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout=\ subprocess.PIPE,stderr=subprocess.PIPE) p.wait() f = open("captcha.txt", "r")#Clean any whitespace characters captchaResponse = f.read().replace(" ", "").replace("\n", "") print("Captcha solution attempt: " + captchaResponse) if len(captchaResponse) == 4:return captchaResponse else:return False def withoutCookieLogin(url=""):driver = webdriver.Chrome() driver.maximize_window() driver.get(url) while True:authCode = getAuthCode(driver, url) if authCode:driver.back() driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").clear() driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").send_keys("orgCode") driver.find_element_by_xpath("//input[@id='account' and @name='username']").clear() driver.find_element_by_xpath("//input[@id='account' and @name='username']").send_keys("username") driver.find_element_by_xpath("//input[@type='password' and @name='password']").clear() driver.find_element_by_xpath("//input[@type='password' and @name='password']").send_keys("password") driver.find_element_by_xpath("//input[@type='text' and @name='authCode']").send_keys(authCode) driver.find_element_by_xpath("//button[@type='submit']").click() try:time.sleep(3) driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a").click() return driver except:print("authCode Error:", authCode) driver.refresh() return driver driver = withoutCookieLogin("http://localhost/") driver.get("http://localhost/enterprise/add/") 怎么获取我们需要的验证码 在这获取验证码的道路上,我掉了太多的坑,看过太多的文章,很多都是教你验证码的识别方法,但是没有说明,怎么获取你当前需要的验证码图片。我的处理方法是:1.先用selenium打开你需要的登录的页面地址url12.通过审核元素获取验证码的地址url2(其实最简单的是右键打开新页面)3:在url1页面,输入地址url2进入url2页面,然后截屏保存验证码页面4:处理验证码得到验证码字符串。
然后点击浏览器后退按钮,返回url1登录页面5:输入登录需要的信息和验证码6:点击登录7:验证登录后的页面,判断是否成功,若不成功则需要重新1-7的操作。为了保护公司的信息,这个页面是我本地搭的服务,我在伯乐在线注册页面进行测试过这个验证码获得方法,可以通过。
(这个验证码的处理方法,仅限验证码背景是像素点,若验证码有横线需额外处理。) 第一篇博文,不喜勿喷。
验证码处理方法参考文献:Web Scraping with python.pdf。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.634秒