java自动化selenium

package testcase;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

/*
 * 第一步:定义3类方法 第一类: setUp()第二类: tearDown() 第三类: test01() test02()……
 * 第二步:为这些方法添加注解(不是注释)!
 * 第三步:定义AndroidDriver 对象名。 从java-client来
 * 第四步:写setup()方法的内容
 * 		4.1 定义一个键值对对象  从selenium-server-standalone来
 * 		4.2 为键值对对象赋值!这步很重要!
 * 	    4.3 定义服务器的地址
 * 		4.4 为driver赋值,把des和url赋值给driver
 * 第五步:写tearDown()方法的内容
 * 第六步:写test()方法的内容,实际上就是写测试脚本的内容。
 */
public class TestCase01 {
	AndroidDriver<AndroidElement>  driver;	
	
	@BeforeClass //在当前类的所有代码执行前执行这个方法
	public void setUp() throws MalformedURLException {
		DesiredCapabilities des = new DesiredCapabilities();
		des.setCapability("platformName", "android"); //指定测试的平台
		des.setCapability("deviceName","xxxxxx"); //指定测试的手机名
		des.setCapability("appPackage","com.amaker.mp"); //指定测试的应用包名
		des.setCapability("appActivity", "com.amaker.mp.LoginActivity"); //指定测试的应用的活动名
		URL url = new URL("http://127.0.0.1:4723/wd/hub"); //定义appium服务器的URL地址
		
		driver = new AndroidDriver<AndroidElement>(url,des); //重要的一步,为driver赋值!
		
	}	
	@AfterClass //在当前类所以的代码执行后,执行这个方法
	public void tearDown() {
		driver.quit(); //测试完毕释放链接,关闭应用!
	}	
	@Test //测试方法,我们脚本主要在这里写!
	public void test01() {
		
		driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"com.amaker.mp:id/userEditText\")").click();
		driver.findElementByAndroidUIAutomator("new UiSelector().text(\"登陆\")").click();
		driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\"陆\")").click();
		driver.findElementByAndroidUIAutomator("new UiSelector().textStartWith(\"登\")").click();
		driver.findElementByAndroidUIAutomator("new UiSelector().textMatches(\"^登\")").click();
		
		driver.findElementByAndroidUIAutomator("new UiSelector().description(\"desc\")").click();
		
		driver.findElementByAndroidUIAutomator("new UiSelector().className(\"android.widget.LinearLayout\")").click();
		
		driver.findElementByAndroidUIAutomator("new UiSelector().className(\"android.widget.LinearLayout\").index(1)").click();
		driver.findElementByAndroidUIAutomator("new UiSelector().className(\"android.widget.LinearLayout\").checked(true).index(1)").click();
//		driver.findElementByAndroidUIAutomator("new UiSelector().textContains('登陆')").click();
//		driver.findElementByAndroidUIAutomator("new UiSelector().textStartWith('登陆')").click();
//		//通过resouce-id属性来查找元素,sendkeys()方法是向文本框输入文字,建议使用这个方法查找!
//		driver.findElement(By.id("com.amaker.mp:id/userEditText")).sendKeys("admin");		
//		driver.findElement(By.id("com.amaker.mp:id/userEditText")).clear();	 //clear是清除文本框的内容	
//		//查找元素的分步式写法
//		AndroidElement el = driver.findElement(By.id("com.amaker.mp:id/userEditText"));
//		el.sendKeys("admin");		
//		driver.findElement(By.id("com.amaker.mp:id/pwdEditText")).sendKeys("admin");	
//		//通过text属性来查找元素
//		driver.findElement(By.name("登陆")).click();		
//		//通过class属性来查找元素,但是很多元素的classname是一致的,这样找到是第一个元素
//		driver.findElement(By.className("android.widget.Button")).click();	
//		//查找元素都有复数方法,找到的不再是一个元素,而是一个元素的列表,这个时候是没有办法直接通过列表操作元素的
//		//需要通过get()方法获取列表中的某一个元素然后进行操作
//		List<AndroidElement> li = driver.findElements(By.className("android.widget.Button"));
//		li.get(1).click();		
//		driver.findElements(By.className("android.widget.Button")).get(1).click();
//		//通过content-desc属性查找元素
//		driver.findElementByAccessibilityId("content-desc的值").click();
//		//通过xpath查找元素,注意相对路径以//开始,过程中的值是元素的class值,如果相同元素有几个,那么我们要在class值后面加上[],[]里面的值
//		//表示的是我们要操作的第几个元素
//		//注意,xpath效率较低,不到万不得已不用
		driver.findElement(By.xpath("//android.widget.TableLayout/android.widget.TableRow[3]/android.widget.Button[2]")).click();;		
	}
	@Test //必须为我们所有的test方法加注解@Test
	public void test02() {}
	
}
@AfterClass
	public void tearDown() {
		driver.quit();
	}	
	public void test01() throws InterruptedException {
		KeyEvent keyEvent = new KeyEvent();
		driver.pressKey(keyEvent.withKey(AndroidKey.HOME));
		
		//把一个元素拖拽到另外一个元素上
		TouchAction tc = new TouchAction<>(driver);
		tc.press(ElementOption.element(driver.findElement(By.name("简单计算器"))));
		tc.waitAction(WaitOptions.waitOptions(Duration.ofMillis(2000)));
		tc.perform();
		tc.moveTo(ElementOption.element(driver.findElement(By.name("卸载")))).release().perform();
		
		
		
		
//		System.out.println("开始测试");
//		String s = driver.currentActivity(); //获取当前活动的名字
//		System.out.println(s);
//		Assert.assertEquals(s, ".activities.GuideActivity"); //通过testNG框架的断言来进行判断,注意,断言就相当于人在执行测试用例时比对预期结果和实际结果!
//															 //在testNG框架中,前面的值是实际结果,后面的值是预期结果!
//		KeyEvent keyEvent = new KeyEvent();
//		driver.pressKey(keyEvent.withKey(AndroidKey.BACK));
//		String s1 = driver.currentActivity();
//		System.out.println(s1);
//		Assert.assertEquals(s1, ".activities.MainActivity");
//		
//		//创建一个等待的对象,后续实现智能等待
//		WebDriverWait wait = new WebDriverWait(driver,15);	//等待15秒
//		
//		//等待15秒,如果15秒内找到元素,则点击那个元素,如果超过15没有找到该元素,则在log中打印“没有找到该元素”信息
//		wait.withMessage("没有找到该元素").ignoring(NoSuchElementException.class).until(ExpectedConditions.presenceOfElementLocated(By.name("计"))).click();
//		//作为条件的有很多种,这里用到的是,能否在界面中定位一个元素,我们也可以通过元素是否可见等方式判断,这个方法也可以作为一种断言,也可以作为一种等待。
//
//		
//		judge(driver.findElement(By.name("计算")));
		
//		AndroidElement el =driver.findElement(By.name(""));
//		driver.findElement(By.id(""));
//		driver.findElement(By.className(""));
//		driver.findElement(By.xpath(""));
//		driver.findElementByAccessibilityId("");
//		el.sendKeys("内容");
//		el.clear();
//		el.click();
//		
//		
//		new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.name("计算"))).click();	
//		Thread.sleep(5000);
//		KeyEvent keyEvent = new KeyEvent();
//		driver.pressKey(keyEvent.withKey(AndroidKey.BACK));		
//		
//		WebDriverWait webDriverWait = new WebDriverWait(driver, 20);
//		webDriverWait.withMessage("没有找到元素").until(ExpectedConditions.visibilityOf(driver.findElement(By.name("计算")))).click();
		
		
//		new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.name("计算"))).click();	
//		driver.pressKey(keyEvent.withKey(AndroidKey.HOME));
//		Thread.sleep(2000);
//		TouchAction tc = new TouchAction<>(driver);
		//press方法,可以传2种参数
		//1、ElementOption 的一个对象,去这个类中调用一个返回该对象的方法element(),这是个静态方法
		//但是element方法也要传一个参数,参数类型是AndroidElement
		//2、PointOption的一个对象
//		tc.press(ElementOption.element(driver.findElement(By.name("计算")))).perform();
//		tc.press(ElementOption.element(driver.findElement(By.name("计算")))).waitAction(WaitOptions.waitOptions(Duration.ofMillis(3000))).release().perform();
//	
//		tc.press(ElementOption.element(driver.findElement(By.name("计算")))); //按住一个元素
//		tc.waitAction(WaitOptions.waitOptions(Duration.ofMillis(3000)));//操作持续3000毫秒
//		tc.release(); //释放操作
//		tc.perform(); //执行上述操作
//		
//		int height = driver.manage().window().getSize().height; //获取当前手机的屏幕高度
//		int width = driver.manage().window().getSize().width; //获取当前手机的屏幕宽度
//		
		tc.press(PointOption.point(1,1)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(2000))).moveTo(PointOption.point(2,2)).release().perform();
//		
//		//如下的操作就是滑动屏幕操作
//		tc.press(PointOption.point(width/6,height/2)); //按下某一给坐标
//		tc.waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))); //操作持续1000毫秒
//		tc.moveTo(PointOption.point(width*5/6,height/2)).release().perform(); //移动到某个坐标释放
		
	}
	
	
	public void judge(WebElement el) {
		FluentWait<WebDriver> wait = new WebDriverWait(driver,15);		
		wait.withMessage("没有找到该元素").ignoring(NoSuchElementException.class).until(ExpectedConditions.visibilityOf(el)).click();
	}
	public void test_add_int() throws InterruptedException {		
		KeyEvent keyevent = new KeyEvent();		
		driver.pressKey(keyevent.withKey(AndroidKey.BACK));

		for(int i=0;i<5;i++) {
			driver.findElement(By.name("计算")).click();
		}
		public AndroidElement find(String name) {//方法寻找元素
		AndroidElement el =null;
		if(name.startsWith("//")) {
			el = driver.findElement(By.xpath(name));
		}else if (name.contains(":id/")) {
			el=driver.findElement(By.id(name));
		}else {
			try {
				el = driver.findElement(By.name(name));
			}catch(NoSuchElementException e1){
				try{
					el = driver.findElementByAccessibilityId(name);
				}catch(NoSuchElementException e2) {
					el = driver.findElement(By.className(name));
					}
				}
		}
		return el;
	}
	/**
	 * @param s   长按元素 为字符
	 * @param time    长按时间
	 */
public void longPress(String s ,long time) {//长按按键方法
		TouchAction tc = new TouchAction<>(driver);
		tc.press(ElementOption.element(find(s))).waitAction(WaitOptions.waitOptions(Duration.ofMillis(time))).release().perform();
}
/**
 * @param x1
 * @param y1
 * @param x2
 * @param y2   屏幕取点的坐标并移动到另一点
 */
public void swipe(double x1,double y1,double x2,double y2 ) {//取点滑动方法
	int height = driver.manage().window().getSize().height;
	int width = driver.manage().window().getSize().width;//获取屏幕大小并赋值
	TouchAction tc = new TouchAction<>(driver);
	tc.press(PointOption.point((int)(x1*width), (int)(y1*height))).
	waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)));
	tc.moveTo(PointOption.point((int)(x2*height),(int)( y2*width))).release().perform();
}
/**
 * 
 * @param elementInfo  查找的元素
 * @param time    等待的时间
 * @param message   在时间内未查到的元素提示消息
 */
public void waitForElemnet(String elementInfo,int time,String message) {//在衣服那个界面
	WebDriverWait wait = new WebDriverWait(driver,time);
	wait.withMessage(message).ignoring(NoSuchElementException.class).until(ExpectedConditions.visibilityOf(find(elementInfo)))
;}
/**
 * 断言方法
 * @param r 为实际结果
 * @param r2  预期结果
 */
public void judge(String r,String r2) {//断言判断当前界面是否为
	 r = driver.currentActivity();
	 r2 = null;
	Assert.assertEquals(r, r2);
}

//-------------------------------
网页
@BeforeClass
	public void setUp() {
		System.setProperty("webdriver.gecko.driver","D:/Drivers/geckodriver.exe");
//		System.setProperty("webdriver.chrome.driver","");
		driver = new FirefoxDriver();
//		driver = new ChromeDriver();
		url = "http://172.31.178.61/thinksns/index.php";
		@AfterClass
	public void tearDown() {
		driver.quit();
	}
	@Test
	public void test() throws InterruptedException {
		driver.get(url);
		driver.findElement(By.name("login_email")).sendKeys("admin@admin.com");
		driver.findElement(By.name("login_password")).sendKeys("123456");
		driver.findElement(By.linkText("登录")).click();
		Thread.sleep(3000);
		//把鼠标移到某一个元素上悬停
		Actions ac = new Actions(driver);
		ac.moveToElement(driver.findElement(By.xpath("/html/body/div[2]/div/div[1]/div[1]/div/div[3]/ul/li[2]/a/img"))).perform();
		Thread.sleep(5000);
		//从一个元素拖动到另一一个元素的位置
		ac.dragAndDrop(driver.findElement(By.id("")),driver.findElement(By.id("")));
		
		//按住一个元素然后向右移动500像素然后释放
		ac.clickAndHold(driver.findElement(By.partialLinkText(""))).moveByOffset(500, 0).release().perform();
		
		Alert al = driver.switchTo().alert();
		al.accept(); //点警告框的确定
		al.dismiss();//点警告框的取消
		al.sendKeys(""); //往警告框的文本框输入内容
		
		driver.navigate().to("http://www.baidu.com");
		driver.navigate().refresh();//刷新页面
		driver.navigate().back();//后退界面
		driver.navigate().forward();//前进
		
		
		
		//用js的方式滑动屏幕,单位是像素
		((JavascriptExecutor) driver).executeScript("window.scrollBy(0, 1000)");//往下滑
		Thread.sleep(5000);
		((JavascriptExecutor) driver).executeScript("window.scrollBy(0, -1000)"); //往上滑
		Thread.sleep(5000);
		
		
		
		driver.findElement(By.id("kw")).sendKeys("魔兽世界");
		driver.findElement(By.id("su")).click();
		Thread.sleep(5000);
		driver.findElement(By.partialLinkText("全新版本“争霸艾泽拉斯”来临")).click();
		Thread.sleep(5000);
		
		String s = driver.getWindowHandle();
		
		Set<String> set = driver.getWindowHandles();
		
		for(String str:set) {
			System.out.println(str);
			if(driver.switchTo().window(str).getTitle().contains("让我们为阵营而战")) {
				driver.switchTo().window(str);
			}
		}
		Thread.sleep(3000);
		driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[2]/ul/li[2]/a")).click();
		Thread.sleep(3000);
		Set<String> set1 = driver.getWindowHandles();
		
		for(String str:set1) {
			System.out.println(str);
			if(driver.switchTo().window(str).getTitle().contains("暴雪游戏通行证")) {
				driver.switchTo().window(str);
			}
		}
		driver.findElement(By.cssSelector("#nid")).sendKeys("123456");
		Thread.sleep(3000);
		
		//有的时候直接切iframe切不了,总是失败,需要先写一句代码
		driver.switchTo().defaultContent(); //有时iframe切不了,就需要先执行一下这个语句。
		driver.switchTo().frame(0);//该页面下的第一个iframe
		driver.switchTo().frame("iframe的id或者name");
		driver.switchTo().frame(driver.findElement(By.id("iframe的id"))); //推荐
		
		driver.switchTo().window("");
		
		
		WebElement el = null;
		
		el = driver.findElement(By.name("")); //通过名字查找,推荐
		el = driver.findElement(By.className("")); //通过className 查找
		el = driver.findElement(By.id("")); //通过id查找,推荐
		el = driver.findElement(By.xpath("")); //通过xpath查找,不太推荐
		el = driver.findElement(By.linkText("")); //通过链接文本查找,推荐
		el = driver.findElement(By.partialLinkText("")); //通过链接文本的部分内容查找
		el = driver.findElement(By.cssSelector("")); //通过css样式选择器查找,推荐
		el = driver.findElement(By.tagName("")); //通过标签名查找
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值