Selenium之偷懒教程

进来一直停留在基础理论知识的学习中,认为太乏味,就写了一个网页自己主动化的demo:自己主动写日报。省的以后自己打开网页写啦。

直接上代码:

自己主动填写日报DEMO

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

import junit.framework.TestCase;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.Select;

public class AutoLog extends TestCase {
	private static final String URL = "your log website";
	private static int mHours = 8;
	private static final String CONTENT_FILE = System.getProperty("user.dir")
			+ File.separator + "config" + File.separator + "logcontent.txt";
	private static final String DRIVER_FILE = System.getProperty("user.dir")
			+ File.separator + "driver" + File.separator + "IEDriverServer.exe";
	private static String mContext = "Job :";
	private static String mDate = "1900-1-1";
	private WebDriver mDriver = null;
	private String mFlag = "FAIL";

	@Override
	public void setUp() throws Exception {
		calculateHours();
		config();
	}

	@Test
	public void test_WriteLog() {
		try {
			System.setProperty("webdriver.ie.driver", DRIVER_FILE);
			mDriver = new InternetExplorerDriver();
			mDriver.get(URL);

			Select select = new Select(mDriver.findElement(By
					.id("task_ProductName")));
			select.selectByVisibleText("iTest");
			Select select1 = new Select(mDriver.findElement(By
					.id("field_Class_1")));
			select1.selectByVisibleText("Test_Development");
			Select select2 = new Select(mDriver.findElement(By
					.id("field_Class_2")));
			select2.selectByVisibleText("Coding");
			WebElement text = mDriver.findElement(By.id("field_CostTime"));
			text.sendKeys(mHours + "");
			mDriver.switchTo().frame("contentFrame");
			mDriver.switchTo().frame(0);
			WebElement content = mDriver
					.findElement(By.className("ke-content"));
			content.click();
			content.sendKeys(mContext);

			mDriver.switchTo().defaultContent();
			WebElement submit = mDriver.findElement(By.name("submit2"));
			// submit.click();

			// WebElement table =
			// mDriver.findElements(By.id("SubmitForm")).get(1)
			// .findElement(By.id("myTodoTable"));
			WebElement table = mDriver.findElement(By.id("this_last"))
					.findElement(By.tagName("table"));
			WebElement tr = table.findElement(By.tagName("tbody")).findElement(
					By.tagName("tr"));
			if (mDate
					.equals(tr.findElements(By.tagName("td")).get(1).getText())) {
				mFlag = "SUCCESS[" + tr.getText() + "]";
			}

		} catch (Exception e) {
			e.printStackTrace();
			mFlag = "EXCEPTION";
		} finally {
			sendMail(mFlag);

		}
	}

	public void tearDown() throws Exception {
		mDriver.quit();
	}

	public void calculateHours() {
		Date date = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		mDate = df.format(date);
		Calendar c = Calendar.getInstance();
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		mHours = hour - 9 - 1;
		minute = minute < 30 ? 0 : 1;
		mHours += minute;
		mHours = mHours < 8 ?

8 : mHours;
	}

	public void config() {
		StringBuilder sb = new StringBuilder();
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					CONTENT_FILE), "UTF-8"));
			String line = null;
			while ((line = br.readLine()) != null) {
				sb.append(line);
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			mContext += sb;
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void sendMail(String result) {
		MailSender javaEmail = new MailSender();
		javaEmail.setMailServerProperties();
		try {
			javaEmail.createEmailMessage(result);
			javaEmail.sendEmail();
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

以下说一下流程。

1.新建java项目

导入selenium-server-standalone-2.42.2.jarmailapi.jarsmtp.jar和Junit库。第一个jar包为selenium-webdriver依赖jar包,后两个为发送邮件用的。

2.下载IEDriverServer

由于我用的是IE。所以我须要在代码里配置IE的驱动程序。

前提是要下到本地。分32位的和64位,我刚開始由于下错64位的,老是启动不了浏览器,折腾了非常长时间。所以看好机器再下载。我这里上传了32位的IEDriverServer

3.代码编写

首先启动浏览器:第一步要把你的IEDriverServer的文件夹设置到环境变量中,然后启动浏览器,输入网址。

System.setProperty("webdriver.ie.driver", DRIVER_FILE);
			mDriver = new InternetExplorerDriver();
			mDriver.get(URL);

等待网页载入完成以后就是以下 的样子:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

然后就是定位我所要选择和填写的控件:首先3个选择框,通过selenium的select对象定位并选择我要的,

Select select = new Select(mDriver.findElement(By.id("task_ProductName")));
select.selectByVisibleText("iTest");
Select select1 = new Select(mDriver.findElement(By.id("field_Class_1")));
select1.selectByVisibleText("Test_Development");
Select select2 = new Select(mDriver.findElement(By.id("field_Class_2")));
select2.selectByVisibleText("Coding");

查看页面控件元素的方式是,在当前页面上按F12.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

然后按一下工具中的光标button,点击你想看的控件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

所以上面三个选择框都是通过id来定位的。

以下来定位时间输入框:

WebElement text = mDriver.findElement(By.id("field_CostTime"));
text.sendKeys(mHours + "");

这个非常easy。以id来定位。时间的计算我是通过实时来计算的。以9点上班为准。计算当前时间与9点的差值。

每一个公司的规章制度不一,每一个公司计算方式也不一样的。

然后就填写日报内容,我用的方式是把日报的内容写在一个txt文档中,然后读这个文档写。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

可是定位日报输入框有点麻烦。由于它是存在于iframe中的。直接定位不到。

所以先得转换到iframe中,contentFrame中又包括了一个iframe。然后还得转。这个时候才真正的转到了class名为ke-edit-iframe中。

然后才干定位输入框。

mDriver.switchTo().frame("contentFrame");
mDriver.switchTo().frame(0);
WebElement content = mDriver.findElement(By.className("ke-content"));
content.click();
content.sendKeys(mContext);

填完上面的内容以后就要提交啦。可是提交button却不在刚才的iframe中。

所以还得先转换到当前上下文。然后再定位提交button。

mDriver.switchTo().defaultContent();
WebElement submit = mDriver.findElement(By.name("submit2"));
submit.click();

好,到这一步就算完毕了。

可是做为一个case。自然要有checkpoint。所以我在代码的后面加了一个推断,推断我是否成功填写日报,然后将结果发送到我的邮箱中。

WebElement table = mDriver.findElement(By.id("this_last"))
					.findElement(By.tagName("table"));
			WebElement tr = table.findElement(By.tagName("tbody")).findElement(
					By.tagName("tr"));
			if (mDate
					.equals(tr.findElements(By.tagName("td")).get(1).getText())) {
				mFlag = "SUCCESS[" + tr.getText() + "]";
			}

sendMail(mFlag);
时间: 2024-10-08 16:11:59

Selenium之偷懒教程的相关文章

Selenium IDE 使用教程(一)

Selenium IDE 使用教程(一) 简介及安装 Selenium IDE 是一个易于使用的Firefox插件.它提供了一个图形用户界面,可进行脚本录制及导出.其记录的脚本可以被转换成多种编程语言(HTML.Ruby.Python.Java.C#).Selenium IDE + Firebug 是写 UI 自动化脚本的两大利器. Selenium IDE下载:http://seleniumhq.org/download/ Firebug下载:https://addons.mozilla.or

selenium的安装教程(基于Python)

在阅读之前,首先你需要安装好Python 可以直接去Python的官网下载.建议使用Python3,毕竟官方很快就停止对Python2的支持了 另外,此篇文章主要目的是为了在公司的分享会上使用,可能有些步骤不会讲的那么详细 你可以访问http://www.python.org直接downloads,这是Python的官网 下载好Python的安装包,是一个.exe文件,双击运行.不会安装的同学可以随便百度一下Python安装教程 另外,Python3的安装包自带配置环境变量的功能,安装的时候记得

Selenium IDE 基础教程

1.下载安装 a 在火狐浏览其中搜索附件组件,查找 Selenium IDE b 下载安装,然后重启firefox 2.界面讲解 在菜单-工具中找到Selenium IDE 打开Selenium IDE ,也可以将Selenium添加到快捷菜单中,Firefox的菜单定制很容易实现. 1 菜单栏 2 被测地址 3 快捷按钮 4 案例列表 5 测试脚本命令列表 6 脚本通过.失败的个数 7 选中命令的参数 8 日志.参考等,其中rollup表示捆绑规则,这个高级功能允许一连串的命令组合成一个动作.

selenium+python在mac环境上的搭建

前言 mac自带了python2.7的环境,所以在mac上安装selenium环境是非常简单的,输入2个指令就能安装好 需要安装的软件: 1.pip 2.selenium2.53.6 3.Firefox44.dmg 4.Pycharm (环境搭配selenium2+Firefox46及以下版本兼容,selenium3+Firefox47+geckodriver) 一.selenium安装 1.mac自带了python2.7,python里面又自带了easy_install工具,所以安装pip用e

git使用教程1-本地代码上传到github

前言 不会使用github都不好意思说自己是码农,github作为一个开源的代码仓库管理平台,我们可以把自己的代码放到github上,分享给小伙伴,自己也能随时随地同步更新代码. 问题来了:为什么越来越多的小伙伴喜欢开源?答:因为我们可以免费下载到大神的源码啊! 一,注册Github账号 1.先注册一个账号,注册地址:https://github.com/ 2.登录后,开始你的旅程 3.创建一个repository name,输入框随便取一个名字(不要用中文!!!) 4.点Create repo

git使用教程2-更新github上代码

前言 前面一篇已经实现首次上传代码到github了,迈出了装逼第一步,本篇继续讲如何把本地更新的代码同步更新到github上 一.clone代码 1.把大神的代码clone到本地,或者clone自己github上的代码,使用指令: >git clone https://github.com/yoyoketang/yoyoketang.git 2.在本地随便建个文件夹,地址栏输入cmd打开,然后输入上面指令 二.git status查看状态 1.查看当前的git仓库状态,可以使用git statu

Selenium菜鸟手册

转自: http://www.iselenium.com/read.php?tid=458 首先声明我还是一只很菜的菜鸟,学习Selenium一个来月而已,发这个帖子是想利用我这块板砖引出真正的玉来,也希望帮助菜鸟们更快地入门,好,废话不多说: 1.对于selenium入门的教程,当然是hyddd的Selenium私房菜和沈东良的Selenium深入浅出 另附oliviazhu推荐的 国外某人的总结http://www.jroller.com/selenium/: 2.从官网下载IDE和RC(官

盘点selenium phantomJS使用的坑

说到python爬虫,刚开始主要用urllib库,虽然接口比较繁琐,但也能实现基本功能.等见识了requests库的威力后,便放弃urllib库,并且也不打算回去了.但对一些动态加载的网站,经常要先分析请求,再用requests模拟,比较麻烦.直到遇到了selenium库,才发现爬动态网页也可以这么简单,果断入坑! selenium是python的一个第三方自动化测试库,虽然是测试库,却也非常适合用来写爬虫,而phantomJS是其子包webdriver下面的一个浏览器.phantomJS本身是

Selenium常用API详解介绍

转至元数据结尾 由 黄从建创建, 最后修改于一月 21, 2019 转至元数据起始 一.selenium元素定位 1.selenium定位方法 2.定位方法的用法 二.控制浏览器操作 1.控制浏览器窗口大小 2.控制浏览器后退.前进 3.刷新页面 三.WebDriver常用方法 1.WebDriver 常用方法 2.其它常用方法 四.模拟鼠标操作 1.关于鼠标操作的其它方法 五.模拟键盘操作 六.获取断言信息 七.设置元素等待 1.显示等待 2.隐式等待 八.定位一组元素 九.多表单切换 十.多