selenium需要下载哪些 架构 有哪些

相关文章推荐:
python自动化部署
初步计划通过python作为脚本语言,Selenium作为web端的测试工具,目前主要是基于web端来构建的
环境搭建步骤(WindowsXP, 32位)
第一步:安装python
根据下面的地址,直接一键安装,全部默认方式。
下载地址:http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
然后设置python的环境变量, Path:“C:\python27;”
Windows下安装配置python
分类:python 10:3031人阅读评论(0)收藏...
阅读(90) 回复(0)
其他文章推荐
初步计划通过python作为脚本语言,Selenium作为web端的测试工具,目前主要是基于web端来构建的
环境搭建步骤(WindowsXP, 32位)
第一步:安装python
根据下面的地址,直接一键安装,全部默认方式。
下载地址:http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
然后设置python的环境变量, Path:“C:\python27;”
Windows下安装配置python
分类:python 10:3031人阅读评论(0)收藏...
阅读(60) 回复(0)
所需软件:python2.7.tar.bz2paramiko-1.7.7.1.tar.gz pycrypto-2.3.tar.gz
所需文件内容格式为:IP,sshPort,Username,Password 执行:python2.7 脚本名 结果:
有些朋友可以考虑到密码明文的问题,目前这个版本没设置任何加密因为目前还不需要。不过密码安全不是问题,最简单的例子,我的密码是6位,现在给出一串字符72de6fde7bceeaf6,在这里,你能知道那6位是密码吗? ^_^有什么不足之处,还请指点,谢谢...
Python/Ruby
阅读(60) 回复(0)
fabric是个轻量级的远程维护工具,结合python来使用。
介绍如下:
Fabric is a python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
所以fabric只支持2.5以后python,如果版本不够,需要首先升级先python。
升级过程如下:
查看现有版本:# python -V
python 2.4.3
下载新的pyt...
Python/Ruby
阅读(210) 回复(0)
python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构
web server ----&application -----& DB server
主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis
application,中文名叫做应用服务,就是你基于某个web framework写的应用代码
DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache,redis这种key-va...
Python/Ruby
阅读(0) 回复(0)
利用python脚本部署zabbix支持gtalk报警
部署环境如下:
chenwei@sysop:~$ uname -a
Linux sysop.raidcall.com.ru 3.5.0-45-generic #68~precise1-Ubuntu SMP Wed Dec 4 16:18:46 UTC
x86_64 x86_64 GNU/Linux
chenwei@sysop:~$ cat /etc/issue
Ubuntu 12.04.4 LTS \n \l
python版本:2.7
python脚本如下(send_gtalk.py): 注:脚本中“sysop,gmail, password”分别为监控的gmail账户和密码
阅读(90) 回复(0)
原文地址:http://www.cnblogs.com/fnng/archive//3106515.html
selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点:
免费,也不用再为破解QTP而大伤脑筋
小巧,对于不同的语言它只是一个包而已,而QTP需要下载安装1个多G 的程序。
这也是最重要的一点,不管你以前更熟悉C、 java、ruby、python、或都是C# ,你都可以通过selenium完成自...
Python/Ruby
阅读(240) 回复(0)
1.简明 python 教程
http://sebug.net/paper/python/index.html
2.ubuntu下安装apache2.2+mod_wsgi+django
http://www.cnblogs.com/lexus/archive//2365896.html
3.python+Eclipse环境搭建
http://blog.csdn.net/spch2008/article/details/8995347
1. 下载eclipse
2. 安装Pydev
运行eclipse,Help =& Install New Software
添加pydev...
Python/Ruby
阅读(180) 回复(0)
代码说明:
随便探究了下,不够深入,有些代码去掉注释可以运行,这么做是为了print 做比较。如有错误,恳请指正。
# -*- coding: utf-8 -*-
#获取本地连接IP地址
import socket
ip = socket.gethostbyname_ex(socket.gethostname())
#print (ip)
'''
'''
ip_1 = ip[2:3]
ip_2 = ip_1[0]
ip_3 = ip_2[1]
print (ip_3)
'''
方法二,列表嵌套索引取值
'''
Python/Ruby
阅读(0) 回复(0)
python基本安装:
* http://www.python.org/ 官方标准python开发包和支持环境,同时也是python的官方网站;
* http://www.activestate.com/
集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进;
python文档:
* http://www.python.org/doc/current/lib/lib.html python库参考手册。
* http://www.byteofpython.info/ 可以代替Tutorial使用,有中文译版的入门书籍。
* http://diveintopython.org/ 一本比较全...
Python/Ruby
阅读(90) 回复(0)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
python是我喜欢的语言,简洁,优美,容易使用。前两天,我很激昂的向朋友宣传python的好处。
听过之后,朋友问我:好吧,我承认python不错,但它为什么叫python呢?
我不是很确定:呃,似乎是一个电视剧的名字。
朋友又问:那你说的Guido是美国人么? (Guido von Rossum,python的作者)
我再次不是很确定:他从google换到Dropbox工作,但他...
Python/Ruby
阅读(90) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Selenium自动化测试框架第一篇
摘要:在这里给大家分享几个Selenium的自动化测试框架Selenium自动化框架(Java)第一篇:以excel维护测试数据,进行数据驱动测试Common模块中主要存放基础操作方法(excel二次封装的读写方法、参数化的配置文本信息、Selenium基础操作方法),简单演示下:excel二次封装的读写方法/**写入测试用例执行结果*/publicvoidaddCaseResult(StringexcelPath,Stringcaseid,Stringresult)throwsB
在这里给大家分享几个Selenium的自动化测试框架 Selenium自动化框架(Java)第一篇: 以excel维护测试数据,进行数据驱动测试
Common模块中主要存放基础操作方法(excel二次封装的读写方法、参数化的配置文本信息、Selenium基础操作方法),简单演示下: excel二次封装的读写方法 /* * 写入测试用例执行结果 */ public void addCaseResult(String excelPath,String caseid,String result) throws BiffException, IOException, RowsExceededException, WriteException{ File file = new File(excelPath); if(file.exists()){ wb = Workbook.getWorkbook(file); wwb = Workbook.createWorkbook(file, wb); sheet = wwb.getSheet(&caseResult&); }else{ wwb = Workbook.createWorkbook(new File(excelPath)); sheet = wwb.createSheet(&caseResult&, 0); } Label a1 = new Label(0,resultLineNum,caseid); Label a2 = new Label(1,resultLineNum,result); sheet.addCell(a1); sheet.addCell(a2); wwb.write(); wwb.close(); resultLineNum++; } /* * 读取excel数据 */ public String[][] readExcel(String testFilePath) throws BiffException, IOException, SQLException{ File file = new File(testFilePath); WorkbookSettings ws = new WorkbookSettings(); ws.setCellValidationDisabled(true); Workbook wwb = Workbook.getWorkbook(file,ws); Sheet sheet = wwb.getSheet(0); int rows = sheet.getRows(); int columns = sheet.getColumns();// System.out.println(rows + &and& + columns); String[][] cases = new String[rows][columns]; for (int i = 0; i & i++) { for (int j = 0; j & j++) { Cell cell = sheet.getCell(j, i); cases[i][j] = cell.getContents(); } } wwb.close(); }
参数化的配置文本信息 public final static String chromeDiverName = &webdriver.chrome.driver&; public final static String chromeDiverpath = &C://Program Files (x86)//Google//Chrome//Application//chromedriver.exe&;// 为了解决多种WebDriver的问题,使用前需要调用SysMethod中的方法初始化 public static WebD// 指定各种类型的账号密码 public final static String chanDaoName = &admin&; public final static String chanDaoPwd = &123456&;// 各用例EXCEL路径 public final static String caseExcelPath = &src/main/resources/chanDaoCases.xls&; public final static String loginCases = &登录&; public final static String productAddCases = &添加产品&; public final static String productEditCases = &编辑产品&; public final static String productDeleteCases = &删除产品&;
Selenium基础操作方法 /* * 使用ChromeDriver测试 */ public void useChromeDriver(){ System.setProperty(SysConfig.chromeDiverName, SysConfig.chromeDiverpath); SysConfig.driver = new ChromeDriver(); } /* * 打开Url地址 */ public void openURL(String url){ SysConfig.driver.get(url); SysConfig.driver.manage().window().maximize(); SysConfig.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); sleep(500); } /* * 判断页面元素是否存在 */ public boolean isElementPresent(By Locator){ try{ SysConfig.driver.findElement(Locator); }catch(NoSuchElementException e){ } } /* * 判断是否有异常弹窗 */ public boolean isAlertPresent(){ try{ SysConfig.driver.switchTo().alert(); }catch(NoAlertPresentException e){ } } /* * 关闭告警及获取文本框信息 */ public String closeAlertAndGetAlertText(){ boolean accept_next_alert = try{ Alert alert = SysConfig.driver.switchTo().alert(); String alertText = alert.getText(); if(accept_next_alert){ alert.accept(); }else { alert.dismiss(); } return alertT }finally{ accept_next_alert = } } /* * 获取告警信息 */ public String getAlertText(){ try{ Alert alert = SysConfig.driver.switchTo().alert(); String text = alert.getText(); }catch(NoAlertPresentException e){ log.error(this,e); return &&; } }
Module模块中主要存放一个大功能模块对应的小功能组合,以禅道的登录模块举例: /* * 禅道 登录测试 * Create By 虫下(古月随笔)
*/public class Login { private Log log = LogFactory.getLog(Login.class); private SysMethod sysMethod = new SysMethod(); /* * 打开登录页面 */ public void openLoginPage(){ sysMethod.openURL(SysConfig.chanDaoLoginUrl); //智能等待10秒,等待页面缓冲完成 SysConfig.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } /* * 设置用户名 */ public void setLoginName(String loginName){ try{ //查找用户名编辑框中的id if(ElementExist(By.name(&account&))){ WebElement ln= SysConfig.driver.findElement(By.name(&account&)); ln.sendKeys(loginName); log.info(&设置用户名:& + loginName); } else { log.info(&用户名框中没有name元素::account&); } }catch(NoSuchElementException e){ log.error(this,e); } } /* * 清除用户名 */ public void clearLoginName(){ try{ if(ElementExist(By.name(&account&))){ WebElement ln= SysConfig.driver.findElement(By.name(&account&)); ln.clear(); log.info(&清除用户名&); } else { log.info(&用户名框中没有name元素::account&); } }catch(NoSuchElementException e){ log.error(this,e); } } /* * 设置密码 */ public void setPwd(String password){ try{ if(ElementExist(By.name(&password&))){ WebElement pwd = SysConfig.driver.findElement(By.name(&password&)); pwd.sendKeys(password); log.info(&设置密码:& + password); } else { log.info(&密码框中没有name元素::password&); } }catch(NoSuchElementException e){ log.error(this,e); } } /* * 清除密码 */ public void clearPwd(){ try{ if(ElementExist(By.name(&password&))){ WebElement pwd = SysConfig.driver.findElement(By.name(&password&)); pwd.clear(); log.info(&清除密码&); } else { log.info(&密码框中没有name元素::password&); } }catch(NoSuchElementException e){ log.error(this,e); } } /* * 点击登录按钮 */ public void clickLoginBtn(){ try{ WebElement btn = SysConfig.driver.findElement(By.id(&submit&)); btn.click(); log.info(&按下登录按钮&); }catch(NoSuchElementException e){ log.error(this,e); } }}
Module.result模块主要针对大功能块的执行结果进行判断,同样以禅道登录模块举例 /* * Create By 虫下(古月随笔)
*/public class LoginResult { /* * 跳转首页URL判断 */ public String loginUrlResult(){ String urlWanted = SysConfig.chanDaoHomeP String res = &&; String url = SysConfig.driver.getCurrentUrl(); if(!urlWanted.equalsIgnoreCase(url)) res = &登录失败,期望URL:& + urlWanted + &实际:& + } /* * 错误消息判断 */ public String errMsgResult(String errorMessageWanted,String errorMessage){ String res = &&; if(!errorMessage.contains(errorMessageWanted)) res = &提示信息与预期不符,期望:& + errorMessageWanted + &。实际:& + errorM }}
cases模块主要是再次封装子功能模块,按照测试用例编写方式组合成一个完整的测试用例,同样以禅道登录举例
Java代码实现: /* * Create By 虫下(古月随笔)
*/public class LoginCases { //初始化登录模块 private Login login = new Login(); //初始化登录判断模块 private LoginResult loginRes = new LoginResult(); //初始化基础方法 private SysMethod sysMethod = new SysMethod(); private Log log = LogFactory.getLog(LoginCases.class); private Excel excel = new Excel(); //获取excel用例路径 private String casePath = SysConfig.caseExcelP private String loginCasePath = SysConfig.loginC /* * 打开登录页面 */ public void openLoginPage(){ sysMethod.openURL(SysConfig.chanDaoLoginUrl); //智能等待10秒,等待页面缓冲完成 SysConfig.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } /* * 登录操作 */ public void login(String loginName,String pwd){ try{ openLoginPage(); login.clearLoginName(); login.setLoginName(loginName); login.clearPwd(); login.setPwd(pwd); login.clickLoginBtn(); sysMethod.sleep(1000); if(sysMethod.isAlertPresent()){ String alertText = sysMethod.closeAlertAndGetAlertText(); System.out.println(&弹出的告警信息为& + alertText); } else { System.out.println(&无告警弹窗!!&); } }catch(Exception e){ log.error(this, e); } }}
Run模块主要是调用Case模块中的对应方法 /* * 运行 * Create By 虫下(古月随笔)
*/public class Run { public static void main(String[] args){ Log log = LogFactory.getLog(Run.class); SysMethod sysMethod = new SysMethod(); sysMethod.useChromeDriver(); LoginCases loginCases = new LoginCases(); loginCases.runLoginCases(); log.info(&用例执行完毕&); }}
最后建议,使用Java建项目工程的时候采用Maven项目工程,维护Jar相当方便
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Selenium自动化测试框架第一篇相关信息,包括
的信息,所有Selenium自动化测试框架第一篇相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International一个可行的Selenium测试框架
老早就想写一些Selenium测试框架的搭建,但是时间和想法都不太成熟。今天就大概粗略的和大家分享一下。
本文的背景假设读者有一定的selenium使用经验。
1.元素定位
大家都知道,网页这个东西在里展现出来的是一个完整的xml,所以可以通过xml的访问方式,字符串查询,正则等来访问xml。
selenium支持的遍历模式有:
&1 public class By
&3 & & & & protected By();
&4 & & & & protected By(Func&ISearchContext, IWebElement& findElementMethod, Func&ISearchContext, ReadOnlyCollection&IWebElement&& findElementsMethod);
&6 & & & & public static bool operator !=(By one, By two);
&7 & & & & public static bool operator ==(By one, By two);
&9 & & & & protected string Description { }
10 & & & & protected Func&ISearchContext, IWebElement& FindElementMethod { }
11 & & & & protected Func&ISearchContext, ReadOnlyCollection&IWebElement&& FindElementsMethod { }
13 & & & & public static By ClassName(string classNameToFind);
14 & & & & public static By CssSelector(string cssSelectorToFind);
15 & & & & public override bool Equals(object obj);
16 & & & & public virtual IWebElement FindElement(ISearchContext context);
17 & & & & public virtual ReadOnlyCollection&IWebElement& FindElements(ISearchContext context);
18 & & & & public override int GetHashCode();
19 & & & & public static By Id(string idToFind);
20 & & & & public static By LinkText(string linkTextToFind);
21 & & & & public static By Name(string nameToFind);
22 & & & & public static By PartialLinkText(string partialLinkTextToFind);
23 & & & & public static By TagName(string tagNameToFind);
24 & & & & public override string ToString();
25 & & & & public static By XPath(string xpathToFind);
大家可以看到最后一个是通过xpath,其他的例如classname,cssselector等估计也是通过xpath来实现的。大家可以去具体看看webdrvier实现的,验证一下思想,如果后续有时间,我会剖析一下webdriver的源代码。
好了,有了xpath,就可以定位网页上的元素了。Selenium 2.0的由来及设计架构(一)
上一篇文章介绍了Selenium1.0的历史及工作原理, 现在,接着上一次的内容说2.0的由来及设计架构。
就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在ThoughtWorks公司的酝酿之中。WebDriver项目的初衷是把端对端测试与底层测试工具隔离开。通常情况下,这种隔离手段通过适配器(Adapter)模式完成。WebDriver正是来源于该方法在许多项目上的不断实践应用,最初是HtmlUnit的封装,工具发布后很快开始支持Internet
Explorer和Firefox。WebDriver的最初代码在2007年初发布。
在WebDriver最初发布时,与Selenium RC存在显著差异,尽管它们都属于浏览器自动化的API工具。对于用户来说,最明显的区别在于Selenium
RC提供基于字典的API,所有方法都在一个类中开放,而WebDriver的API更面向对象。此外,WebDriver仅支持Java,而Selenium RC提供广泛的语言支持。技术差异也很明显:Selenium
Core(RC的基础)基本上是JavaScript应用,运行在浏览器的安全沙箱之内。WebDriver则尝试原生绑定到浏览器中,绕开了浏览器的安全模型,代价就是框架自身的开发投入显著增加。
在2009年8月,两个项目宣布合并,Selenium WebDriver就是合并的成果。
WebDriver的创建者Simon Stewart早在2009年8月的一份邮件中解释了项目合并的原因:
为何把两个项目合并?部分原因是WebDriver解决了Selenium存在的缺点(比如,能够绕过JS沙箱。我们有出色的API),部分原因是 Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器),部分原因是因为Selenium的主要贡献者和我都觉得合并项目是为用户提供最优秀框架的最佳途径。
目前,WebDriver支持的语言绑定包括Java、C#、Python和Ruby。它支持Chrome、Firefox、Opera和移动端Android、iPhone浏览器。此外,还有其他关联项目,不在同一源代码库中维护,但是和主项目(Selenium
WebDriver)紧密合作,例如提供Perl绑定支持、BlackBerry浏览器支持,以及“无头”WebKit——用于持续集成的测试其无法正常显示的情况。最初的Selenium RC机制仍然维持,帮助WebDriver在浏览器不受支持的情况下提供支持。
在两个项目合并中出现了哪些架构方面的问题?学到了哪些经验和教训?Simon Stewart在《The Architecture of Open Source Applications》一文中做了详细的描述,本文参考了以下内容:
http://www.aosabook.org/en/selenium.html
http://www.infoq.com/cn/news/2011/07/selenium-arch-2
处理复杂性
软件是模块构造起来的。这些模块很复杂,作为API的设计人员们,可以选择如何处理这种复杂性。极端情况下,可能会传播这种复杂性,这意味着API的每一位用户都需要牵涉其中。另一个极端情况是承担尽可能多的复杂性并将其隔离在某个地方。这个地方对于许多想一探究竟的API用户来说黑暗而恐怖。折中方案则是API的用户,如果无须深入了解实现细节,那么只需面对当前所遇到的复杂性即可。
WebDriver的开发人员更倾向于发现并在少数地方隔离这些复杂性,而不是传播它。这么做的原因之一是为用户着想。看看bug列表就会知道,他们特别善于发现问题和缺陷,但是因为许多用户不是开发人员,复杂的API不会受欢迎。开发人员试图让API正确地引导大家。例如,考虑下面来自早期Selenium
API的方法,每一个都用于设置输入元素的值:
typeKeysNative
keydownNative
keypressNative
keyupNative
attachFile
下面是WebDriver API中的等价方法:
如前所述,这凸显了RC和WebDriver之间的主要思想差异——WebDriver在努力模拟用户,而RC在较低层次提供的API让用户难以或者无法使用。typeKeys和typeKeysNative之间的区别在于前者总是使用合成事件(synthetic
event),而后者则尝试利用AWT Robot输入键值。令人失望的是,AWT Robot发送按键事件给具有焦点的任意窗口,也就是说可能不是浏览器。相比之下,WebDriver的原生事件,直接把事件发送给窗口处理函数,避免了浏览器窗口必须具有焦点的要求。
WebDriver设计
WebDriver的API被定位为“基于对象的”。接口被明确定义并努力坚持只包含一个角色或者责任,而不是将每一个可能的HTML标记模块化为单独的类,只有一个WebElement接口。通过这种方式,开发人员使用支持自动补全的IDE即可被提示下一步工作。其结果类似于下面的代码片段(Java语言):
WebDriver driver = new FirefoxDriver();
driver.&user hits space&
此时,包含13个方法的短列表显示出来,用户选择其中一个:
driver.findElement(&user hits space&)
大多数IDE现在显示预期参数的类型提示,在这个例子中是“By”。By包含许多预定义的静态工厂方法,用户可以快速地完成刚才的代码:
driver.findElement(By.id("some_id"));
基于角色的接口
WebDriver广泛使用了基于角色的接口。例如,有一个JavascriptExecutor接口提供了在当前页面环境中执行任意Javascript语句块的功能。WebDriver实例对该接口的成功映射可以提示你利用该方法完成自己的工作。
处理大量的组合
假设X种浏览器和Y种语言,我们很容易就会掉进X×Y种实现中,将会面临维护成本的大量攀升。
减少WebDriver支持的编程语言种类是降低成本的途径之一,但是基于两种原因不想这样做。首先,从一种语言切换到另一种时人们会承受认知负荷,因此对用户来说如果测试框架(WebDriver)能够允许他们采用在日常开发中使用的编程语言来编写测试,那么这是巨大的优势。其次,在单一项目中混合多种语言可能会让团队很不方便,而且公司的编码规范和需求通常要求技术单一纯正性,因此,减少支持语言的种类不是可选项。
减少支持浏览器的数量也不是一种选择——当项目组决定在WebDriver中淘汰对Firefox 2的支持时,就遇到了强烈的抗议,而事实上当时,Firefox
2只占了浏览器市场份额不到1%。
唯一的选择是努力使所有浏览器对语言的绑定看起来相同:它们应该提供统一的接口,可以轻松地通过各种语言解决。更重要的是,希望语言绑定本身尽可能的易于编写,这意味着需要尽可能的使它们保持简洁。在底层driver中放入了尽可能多的逻辑来支持这种设计:放弃放入dirver的每一块功能都意味着需要通过支持的每一种语言实现,而这代表了大量的工作量。
WebDriver设计中的缺陷
通过这种方式发布功能的缺陷在于除非有人知道某个特定的接口存在,否则他们可能不会意识到WebDriver支持这种功能,在API的可发掘性上存在缺憾。当然在WebDriver刚发布的时候,我们会投入大量时间来指导人们找到合适的接口。现在我们已经花费大量精力来编写文档,随着API获得广泛应用,用户会越来越容易的找到所需的文档。
从实现者的观点来看,紧密绑定浏览器也是一种设计缺陷,虽然无法避免。支持新浏览器时需要投入巨大的努力,经常需要数次尝试才能找到正确方法。具体的例子就是,Chrome驱动经过了四次完全重写,IE驱动也有三种关键重写。紧密绑定浏览器的优点在于它提供了更多控制权。
下一篇文章我会把WebDriver的创建者Simon Stewart介绍的余下内容翻译完,包括以下内容:
1. 布局及JavaScript
2. 特别介绍Remote和Firefox driver
3. IE driver
4. Selenium RC
6. 展望未来
未完待续,请阅读后面的文章:
Selenium 2.0的由来及设计架构(二)
Selenium 2.0的由来及设计架构(三)
本文是译文,原文请参考:http://www.aosabook.org/en/selenium.html
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 selenium支持哪些语言 的文章

 

随机推荐