Appium自动测试框架学习笔记【四】

本文分享了一次使用Appium进行美团App自动化测试的经历,详细展示了如何编写代码来模拟用户操作,包括修改城市设置、浏览底部菜单、进入美食页面并进行搜索等。尽管作者最终放弃了比赛,但这段代码仍为读者提供了宝贵的参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这比赛我最终放弃了,没什么搞头,贴一下我的代码,有兴趣的参考下吧,也没什么技术含量。?汗

代码

package com.mooctest;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.AndroidKeyCode;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.UnreachableBrowserException;


public class Main {
	
	/**
	 * 所有和AppiumDriver相关的操作都必须写在该函数中
	 * @param driver
	 */
	public void test(AppiumDriver driver) throws InterruptedException{
		 
		Thread.sleep(6000);		//等待6s,待应用完全启动
		
    	driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //设置尝试定位控件的最长时间为8s,也就是最多尝试8s
      /*
    	 * 余下的测试逻辑请按照题目要求进行编写
    	 */
    	//修改城市为南京
    	Thread.sleep(10000);
    	Boolean is_update = driver.getPageSource().contains("com.sankuai.meituan:id/btn_cancle");
    	if(is_update) {
    		driver.findElement(By.id("com.sankuai.meituan:id/btn_cancle")).click();
    	}
//    	driver.findElement(By.id("com.sankuai.meituan:id/btn_cancle")).click();
//        Thread.sleep(1000);
    	driver.findElement(By.className("android.widget.EditText")).sendKeys("南京");
        Thread.sleep(2000);
        driver.findElement(By.id("com.sankuai.meituan:id/citylist_textview")).click();
        Thread.sleep(8000);
        Boolean is_update1 = driver.getPageSource().contains("com.sankuai.meituan:id/btn_cancle");
    	if(is_update1) {
    		driver.findElement(By.id("com.sankuai.meituan:id/btn_cancle")).click();
    	}

		System.out.println("Step one is done!");
		//Test for bottoms
		driver.findElementByAccessibilityId("附近").click();
		Thread.sleep(1000);
		
		driver.findElementByAccessibilityId("发现").click();
		Thread.sleep(1000);
		
		driver.findElementByAccessibilityId("订单").click();
		Thread.sleep(1000);
		
		driver.findElementByAccessibilityId("我的").click();
		Thread.sleep(1000);
		
		driver.findElementByAccessibilityId("首页").click();
		Thread.sleep(1000);
		System.out.println("Step two is done!");
		//进入美食页面
		driver.findElementByAccessibilityId("美食").click();
		Thread.sleep(10000);
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'0')]")).click();
		Thread.sleep(2000);
		driver.sendKeyEvent(4);
		System.out.println("0 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'1')]")).click();
		Thread.sleep(2000);
		driver.sendKeyEvent(4);
		System.out.println("1 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'2')]")).click();
		Thread.sleep(2000);
		driver.sendKeyEvent(4);
		System.out.println("2 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'3')]")).click();
		Thread.sleep(2000);
		driver.sendKeyEvent(4);
		System.out.println("3 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'4')]")).click();
		Thread.sleep(8000);
		driver.findElement(By.id("com.sankuai.meituan:id/close")).click();
		Thread.sleep(500);
		driver.sendKeyEvent(4);
		System.out.println("4 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'5')]")).click();
		Thread.sleep(8000);
//		driver.findElement(By.id("com.sankuai.meituan:id/close")).click();
//		Thread.sleep(500);
		driver.sendKeyEvent(4);
		System.out.println("5 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'6')]")).click();
		Thread.sleep(2000);
		driver.sendKeyEvent(4);
		System.out.println("6 done");
		
		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'7')]")).click();
		Thread.sleep(4000);
		driver.sendKeyEvent(4);
		System.out.println("7 done");
		
//		driver.findElement(By.xpath("//android.widget.LinearLayout[contains(@index,'8')]")).click();
//		Thread.sleep(3000);
//		driver.sendKeyEvent(4);
		
		//进入美食中的地图子页面

		driver.findElement(By.id("com.sankuai.meituan:id/food_list_map_menu_img")).click();
		Thread.sleep(2000);
		driver.findElement(By.xpath("//android.widget.TextView[contains(@index,'3')]")).click();
//		driver.sendKeyEvent(66);
		Thread.sleep(8000);
		driver.sendKeyEvent(4);
		
		driver.findElement(By.id("com.sankuai.meituan:id/tv_search_text")).sendKeys("小龙虾");
		Thread.sleep(1000);
		driver.findElement(By.id("com.sankuai.meituan:id/search")).click();
		Thread.sleep(8000);
		
		driver.quit();
	}
	
	/**
	 * AppiumDriver的初始化逻辑必须写在该函数中
	 * @return
	 */
	public AppiumDriver initAppiumTest() {
		
		AppiumDriver driver=null;
        File classpathRoot = new File(System.getProperty("user.dir"));
        File appDir = new File(classpathRoot, "apk");
        File app = new File(appDir, "Meituan.apk");
        
        //设置自动化相关参数
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "Android Emulator");
        //设置apk路径
        capabilities.setCapability("app", app.getAbsolutePath()); 
        capabilities.setCapability("appPackage","com.sankuai.meituan");
        capabilities.setCapability("appActivity","com.meituan.android.pt.homepage.activity.Welcome");

        //设置使用unicode键盘,支持输入中文和特殊字符
        capabilities.setCapability("unicodeKeyboard","true");
        //设置用例执行完成后重置键盘
        capabilities.setCapability("resetKeyboard","true");
        capabilities.setCapability("noSign","true");

        //初始化
        try {
			driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}   
        return driver;
	}
	
	public void start() {
		try {
			test(initAppiumTest());
		}catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}
	
//	public void myFindElement(AppiumDriver driver,String ByPass ,String info,String operator) {
//		
//	}
	
	public static void main(String[] args) {
		Main main = new Main();
		main.start();
	}
	

}

总结

令我绝望的是,代码提交不上去。。。

此系列终!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值