package com.appium.test;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.UnreachableBrowserException;
public class AutomTestStart {
private boolean isInstall = false;
public static RemoteWebDriver driver;
public static String dateStringDir = "000000000000";
public static void main(String args[]) throws Exception{
SimpleDateFormat Timeformat= new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
// 接下来我们生成时间戳; 括号内的参数 new Date 是java内部的源码类 不是我们封装的.
dateStringDir = Timeformat.format(new Date());
setUp();
certification();
logintest();
// mainmojerFirst();
recond();
}
public static void setUp() throws Exception {
//启动appium
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName","ios");
capabilities.setCapability("platformVersion","12.1.4");
capabilities.setCapability("udid","****");
capabilities.setCapability("deviceName","iPhone 6");
capabilities.setCapability("bundleId","net.humanbridge.mobile.***");
capabilities.setCapability("xcodeSigningId","iPhone Developer");
capabilities.setCapability("xcodeOrgId","***@qq.com");
capabilities.setCapability("wdaLocalPort", "8101");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
// 超时设置
driver.manage().timeouts().implicitlyWait(600,TimeUnit.SECONDS);
}
// 承诺页面测试
public static void certification() throws IOException{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "cn", 5000);
try{
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"承諾\"]").click();
System.out.println("成功找到://XCUIElementTypeButton[@name=\"承諾\"],开始截屏!!");
Screenshot(driver, "cn", 0);
} catch(NoSuchElementException e){
System.out.println("没找到//XCUIElementTypeButton[@name=\"承諾\"],可能锁屏啦!!");
}
}
// 登录页面测试
public static void logintest() throws IOException{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "lg", 5000);
try{
driver.findElementByXPath("//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeTextField").sendKeys("DR001");
System.out.println("成功找到://XCUIElementTypeButton[@name=\"承諾\"],开始截屏!!");
} catch(NoSuchElementException e){
System.out.println("没找到://XCUIElementTypeButton[@name=\"承諾\"],可能锁屏啦!!");
}
try{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "lg", 5000);
driver.findElementByXPath("//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeSecureTextField").sendKeys("zzr1100!");
System.out.println("成功找到://XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeSecureTextField,开始截屏!!");
} catch(NoSuchElementException e){
System.out.println("没找到://XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeSecureTextField,可能锁屏啦!!");
}
try{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "lg", 5000);
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"ログイン\"]").click();
System.out.println("成功找到://XCUIElementTypeButton[@name=\"ログイン\"],开始截屏!!");
} catch(NoSuchElementException e){
System.out.println("没找到://XCUIElementTypeButton[@name=\"ログイン\"],可能锁屏啦!!");
}
Screenshot(driver, "lg", 5000);
}
// 気になる患者から探す 和返回 测试
public static void mainmojerFirst() throws IOException{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "mf", 5000);
// (//XCUIElementTypeLink[@name="気になる患者から探す"])[1]
try{
driver.findElementByXPath("(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1]").click();
System.out.println("成功找到,并执行:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],开始截屏!!");
Screenshot(driver, "mf", 5000);
} catch(NoSuchElementException e){
System.out.println("没找到:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],可能锁屏啦!!");
unlockTest();
}
// 查找到患者并选中患者
int count = 1;
while(count < 10){
try{
driver.findElementByXPath("//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2]").click();
System.out.println("成功找到,并执行://XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,患者找到了。");
break;
} catch(NoSuchElementException e){
// //XCUIElementTypeButton[@name="選択"]
// 此节点不存在情况:锁屏,真不存在
if(unlockTest()){
continue;
} else {
// 真不存在情况
System.out.println(count+"继续查找中。。。。");
count ++ ;
}
}
}
// 判断记载按钮是否存在
// (//XCUIElementTypeOther[@name="メイン"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]
try{
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
} catch(NoSuchElementException e){
Screenshot(driver, "mf", 5000);
System.out.println("没找到:(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1],可能锁屏啦!!");
if(unlockTest()){
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
}
}
}
public static void recond() throws IOException{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "mf", 5000);
// (//XCUIElementTypeLink[@name="気になる患者から探す"])[1]
try{
driver.findElementByXPath("(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1]").click();
System.out.println("成功找到,并执行:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],开始截屏!!");
Screenshot(driver, "mf", 5000);
} catch(NoSuchElementException e){
System.out.println("没找到:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],可能锁屏啦!!");
unlockTest();
}
// 查找到患者并选中患者
int count = 1;
while(count < 10){
try{
driver.findElementByXPath("//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2]").click();
System.out.println("成功找到,并执行://XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,患者找到了。");
break;
} catch(NoSuchElementException e){
// //XCUIElementTypeButton[@name="選択"]
// 此节点不存在情况:锁屏,真不存在
if(unlockTest()){
continue;
} else {
// 真不存在情况
System.out.println(count+"继续查找中。。。。");
count ++ ;
}
}
}
// 判断记载按钮是否存在
// (//XCUIElementTypeOther[@name="メイン"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]
try{
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
ele.click();
if(isElementExist("//XCUIElementTypeStaticText[@name=\"2019年02月27日\"]")) {
System.out.println("测试成功!记载日期显示正确!!!");
}
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
} catch(NoSuchElementException e){
Screenshot(driver, "mf", 5000);
System.out.println("没找到:(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1],可能锁屏啦!!");
if(unlockTest()){
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
}
}
}
public static void recond3() throws IOException{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "mf", 5000);
// (//XCUIElementTypeLink[@name="気になる患者から探す"])[1]
try{
driver.findElementByXPath("(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1]").click();
System.out.println("成功找到,并执行:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],开始截屏!!");
Screenshot(driver, "mf", 5000);
} catch(NoSuchElementException e){
System.out.println("没找到:(//XCUIElementTypeLink[@name=\"気になる患者から探す\"])[1],可能锁屏啦!!");
unlockTest();
}
// 查找到患者并选中患者
int count = 1;
while(count < 10){
try{
driver.findElementByXPath("//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2]").click();
System.out.println("成功找到,并执行://XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther["+count+"]/XCUIElementTypeLink[2],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,患者找到了。");
break;
} catch(NoSuchElementException e){
// //XCUIElementTypeButton[@name="選択"]
// 此节点不存在情况:锁屏,真不存在
if(unlockTest()){
continue;
} else {
// 真不存在情况
System.out.println(count+"继续查找中。。。。");
count ++ ;
}
}
}
// 判断记载按钮是否存在
// (//XCUIElementTypeOther[@name="メイン"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]
try{
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
ele.click();
if(isElementExist("//XCUIElementTypeStaticText[@name=\"2019年02月27日\"]")) {
System.out.println("测试成功!记载日期显示正确!!!");
}
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
} catch(NoSuchElementException e){
Screenshot(driver, "mf", 5000);
System.out.println("没找到:(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1],可能锁屏啦!!");
if(unlockTest()){
if(isElementExist("//XCUIElementTypeButton[@name=\"選択\"]")) {
// 制限患者情况
driver.findElementByXPath("//XCUIElementTypeButton[@name=\"選択\"]").click();
System.out.println("成功找到,并执行://XCUIElementTypeButton[@name=\"選択\"],开始截屏!!");
Screenshot(driver, "mf", 5000);
System.out.println(count+"ok,制限患者解除");
}
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"メイン\"])[2]/XCUIElementTypeOther/XCUIElementTypeLink[1]");
if(ele.isDisplayed()){
System.out.println("测试成功!账号:DR001具有记载权限");
} else {
System.out.println("测试成功!账号:DR001不具有记载权限");
}
}
}
}
// 返回用例
public static void back() throws IOException{
try{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "mf", 5000);
// driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1]").click();
WebElement ele = driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1]");
System.out.println("成功找到://XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1]");
ele.click();
System.out.println("成功执行:(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1],开始截屏!!");
System.out.println("开始截屏!!");
Screenshot(driver, "mf", 5000);
} catch(NoSuchElementException e){
System.out.println("没找到:(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1],可能锁屏啦!!");
unlockTest();
try{
System.out.println("准备开始记录上一次用例执行结果状态");
Screenshot(driver, "mf", 5000);
driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1]").click();
System.out.println("成功找到,并执行:(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1],开始截屏!!");
Screenshot(driver, "mf", 5000);
} catch(NoSuchElementException e1){
System.out.println("没找到:(//XCUIElementTypeOther[@name=\"バナー\"])[2]/XCUIElementTypeOther[1],可能锁屏啦!!");
unlockTest();
}
}
}
// 自动解锁用例
public static boolean unlockTest() throws IOException{
// try {
// Thread.sleep(5000);//记得要等待
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// try{
// System.out.println("准备开始记录上一次用例执行结果状态");
// Screenshot(driver, "ul", 5000);
// System.out.println("开始尝试解锁检查!!!!");
// // (//XCUIElementTypeStaticText[@name="テスト IT2069"])[1]
// String xpath_new = "//XCUIElementTypeOther[@name=\"メイン\"]/XCUIElementTypeOther/XCUIElementTypeOther[10]/XCUIElementTypeLink[3]/XCUIElementTypeLink";
// String xpath_old = "(//XCUIElementTypeStaticText[@name=\"テスト IT2069\"])[1]";
// driver.findElementByXPath(xpath_old).click();
// System.out.println("解锁中!!!!");
// driver.findElementByXPath(xpath_old).click();
// System.out.println("解锁中!!!!");
// driver.findElementByXPath(xpath_old).click();
// System.out.println("解锁中!!!!");
// driver.findElementByXPath(xpath_old).click();
// System.out.println("解锁成功,并执行:(//XCUIElementTypeStaticText[@name=\"テスト IT2069\"])[1],开始截屏!!");
// Screenshot(driver, "ul", 5000);
// return true;
// } catch(NoSuchElementException e){
// System.out.println("没找到:(//XCUIElementTypeStaticText[@name=\"テスト IT2069\"])[1],没有锁屏!!");
// return false;
// } catch(UnreachableBrowserException e1){
// System.out.println("Error communicating with the remote browser. It may have died.");
// return false;
// }
return false;
}
// 截屏工具
public static void Screenshot(RemoteWebDriver driver,String Picturename, int sleeptime) throws IOException {
try {
Thread.sleep(sleeptime);//记得要等待
} catch (InterruptedException e) {
e.printStackTrace();
}
// 上面就是类的外部.接下来我们首先需要设置一个时间的格式: Timeformat 就是时间格式的对象.
SimpleDateFormat Timeformat= new SimpleDateFormat("yyy-MM-dd-HH-mm-ss");
// 接下来我们生成时间戳; 括号内的参数 new Date 是java内部的源码类 不是我们封装的.
String dateString = Timeformat.format(new Date());
//生成图片的目录
String dir_name = System.getProperty("user.dir")+"/image/" + dateStringDir + "/" + Picturename + "/";
System.out.println(dir_name);
// 由于可能会存在图片的目录被删除的可能,,所以我们先判断目录是否存在, 如果不在的话:
if( !(new File(dir_name).isDirectory())){
// 不存在的话就进行创建目录.
new File(dir_name ).mkdir();
}
// 调用方法捕捉画面;
File screen = driver.getScreenshotAs(OutputType.FILE);
// 复制文件到本地目录, 图片的最后存放地址为
System.out.println(dir_name+"/"+dateString +Picturename+".jpg");
FileUtils.copyFile(screen, new File(dir_name+"/"+dateString +Picturename+".jpg"));
}
// 判断页面是否含有某个元素
public static boolean isElementExist(String xpath ){
try{
driver.findElement(By.xpath(xpath));
return true;
}catch(org.openqa.selenium.NoSuchElementException ex){
return false;
}
}
// 停止测试
public static void tearDown() throws Exception {
driver.quit();
}
}