从签到脚本到自动化(一)

来源:互联网 发布:数据分析研究生 编辑:程序博客网 时间:2024/05/01 07:52

前一段时间好多同事因为签到或代签原因被重重罚了一笔。呵呵,本着潜心研究技术的目地,私下搞了两套签到脚本,同时也是复习一下好久不用的Java技术。

一.前台模拟页面登陆
第一套采用的是一套开源的自动化框架:WebDriver,模拟从页面登陆,填写签到信息,最终端到签到的整个流程。
先介绍一下WebDriver框架,官方介绍内容如下:
WebDriver is a tool for automating testing web applications, and in particular to verify that they work as expected. It aims to provide a friendly API that’s easy to explore and understand, which will help make your tests easier to read and maintain. It’s not tied to any particular test framework, so it can be used equally well with JUnit, TestNG or from a plain old “main” method.
翻译一下:
WebDriver是一套web应用的自动化测试工具,用于验证这些Web应用工作时是否达到预期。WebDriver旨在提供一套友好的API,易于研究与理解,可以使测试变得更容易,且易于维护。WebDriver并未绑定任何特殊的自动化框架,所以你可以很容易地将它和JUnit、TestNG,甚至可以直接从main方法开始写自动化。

签到登陆部分
1.看代码很容易就理解了,driver.findElement还是很好用的,除了不能直接抓取外(firefox下的webdriver是可以的,可惜咱的工作的系统不支持),支持从name、id、xpath等各种Web应用通常采用的查找方式。

01WebDriver driver = new InternetExplorerDriver();
02//打开IE浏览器,输入签到系统地址。
03driver.get(WEB_HOME);
04 
05// 输入登陆信息并提交
06driver.findElement(By.name("userId")).sendKeys(USERNAME);
07driver.findElement(By.name("userPwd")).clear();
08driver.findElement(By.name("userPwd")).sendKeys(PASSWORD);
09driver.findElement(By.xpath("//input[@type='submit']")).sendKeys(
10Keys.ENTER);
11 
12// 延时确保页面加载完成
13try {
14TimeUnit.SECONDS.sleep(3);
15catch (InterruptedException e) {
16e.printStackTrace();
17}

 

上面代码执行完成之后就到了如下界面:

签到界面1

 

2.点击“签到/签退”链接并签到
这个时候处理就有点棘手了,因为必须要先点左边的“签到/签退”才能到真正要签到的页面,而左侧整个版本是在一个iframe中。熟悉Web开发的人肯定都知道,一个iframe就是一个页面,因此直接在当前页是获取不到这个“签到/签退”链接,必须要进入iframe页面才行,右半边也是同样的道理,好在WebDriver可以很方便的切换iframe,代码如下:

01// 跳转到左侧
02driver.switchTo().frame("leftFrame");
03driver.findElement(By.linkText("签到/签退")).sendKeys(Keys.ENTER);
04 
05// 延时确保页面加载完成
06try {
07TimeUnit.SECONDS.sleep(3);
08catch (InterruptedException e) {
09e.printStackTrace();
10}

 

再用同样的方式跳转到右侧后,真正的工作就开始啦~~嘿嘿,短短两行代码,结果你懂的:

1// 输入签到签退信息
2driver.findElement(By.id("remark")).sendKeys(content);
3// 点击按钮提交签到
4driver.findElement(By.xpath("//input[@value='签到']")).sendKeys(
5Keys.ENTER);

虽然做完很兴奋,冷静下来这个明显还是有问题的,模拟用户操作的方式会存在很多问题,比如刚拷到白云的机器上试了一下,就有问题,弹出了一个没有预期的窗口,程序直接就中断了。
问题分析如下:
模拟操作时各种异常没能考虑。
没有定时执行的功能。
只有数十行代码,但涉及的资源包太多,打成JAR包后运行就已经有十几M了,相当臃肿。


原创粉丝点击