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("")); //通过标签名查找
}
java自动化selenium
最新推荐文章于 2024-05-09 23:15:00 发布