移动应用的测试的第一题,是简豆软件的测试。自己写了一下,由于不知道标准答案,但是实现了所有的需求。下面是主要的代码。
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) { try { Thread.sleep(6000); //等待6s,待应用完全启动 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS); //设置尝试定位控件的最长时间为8s,也就是最多尝试8s /* * 余下的测试逻辑请按照题目要求进行编写 */ try { //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //电影页面 driver.findElementByXPath("//android.widget.CheckedTextView[@text='电影']").click(); Thread.sleep(1000); //电影页面的爱情页面 driver.findElementByXPath("//android.widget.TextView[@text='爱情']").click(); Thread.sleep(1000); //爱情页面的泰坦尼克号 driver.findElementByXPath("//android.widget.TextView[@text='泰坦尼克号']").click(); Thread.sleep(1000); //泰坦尼克号的返回 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //电影页面的喜剧页面 driver.findElementByXPath("//android.widget.TextView[@text='喜剧']").click(); Thread.sleep(1000); //电影页面的动画页面 driver.findElementByXPath("//android.widget.TextView[@text='动画']").click(); Thread.sleep(1000); //电影页面的动画科幻页面 driver.findElementByXPath("//android.widget.TextView[@text='科幻']").click(); Thread.sleep(1000); //电影页面的动作页面 driver.findElementByXPath("//android.widget.TextView[@text='动作']").click(); Thread.sleep(1000); //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //图书 driver.findElementByClassName("android.widget.LinearLayout").click(); Thread.sleep(1000); //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //电影榜单 driver.findElementByXPath("//android.widget.CheckedTextView[@text='电影榜单']").click(); Thread.sleep(1000); //电影榜单的正在热映 driver.findElementByXPath("//android.widget.TextView[@text='正在热映']").click(); Thread.sleep(1000); //电影榜单的即将上映 driver.findElementByXPath("//android.widget.TextView[@text='即将上映']").click(); Thread.sleep(1000); //电影榜单的TOP250 driver.findElementByXPath("//android.widget.TextView[@text='TOP250']").click(); Thread.sleep(1000); //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //我的收藏 driver.findElementByXPath("//android.widget.CheckedTextView[@text='我的收藏']").click(); Thread.sleep(1000); //我的收藏的电影页面 driver.findElementByXPath("//android.widget.TextView[@text='电影']").click(); Thread.sleep(1000); //我的收藏的图书页面 driver.findElementByXPath("//android.widget.TextView[@text='图书']").click(); Thread.sleep(1000); //我的收藏的影人页面 driver.findElementByXPath("//android.widget.TextView[@text='影人']").click(); Thread.sleep(1000); //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(1000); //更改标签 driver.findElementByXPath("//android.widget.CheckedTextView[@text='更改标签']").click(); Thread.sleep(1000); //三条杠 driver.findElementByClassName("android.widget.ImageButton").click(); Thread.sleep(500); //设置 driver.findElementByXPath("//android.widget.CheckedTextView[@text='设置']").click(); Thread.sleep(1000); } catch (Exception e) { } } /** * 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, "Jiandou.apk"); //设置自动化相关参数 DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("browserName", ""); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "Android Emulator"); capabilities.setCapability("appPackage", "com.lhr.jiandou"); capabilities.setCapability("appActivity", ".activity.MainActivity"); capabilities.setCapability("noSign", "true"); //设置apk路径 capabilities.setCapability("app", app.getAbsolutePath()); //设置使用unicode键盘,支持输入中文和特殊字符 capabilities.setCapability("unicodeKeyboard","true"); //设置用例执行完成后重置键盘 capabilities.setCapability("resetKeyboard","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() { test(initAppiumTest()); } public static void main(String[] args) { Main main = new Main(); main.start(); } }