shell 启动WebDriverAgent(wda)的方式

通过shell的方式启动 facebook 的 webDriverAgent

关键词

wda iOS自动化 iproxy webDriverAgent

#!/usr/bin/env bash
: '
@File   : start.sh
@Author : 悠然
@Date   : 2020-03-31
@Desc   : 启动WDA
'

#UDID=$1
#PORT=$2
#WDA_PATH=$3
UDID=$(idevice_id -l | head -n1)
PORT=8100
BAT_PORT=8090
CURRENT_PATH=$(cd "$(dirname "$0")" && pwd)
ROOT_PATH=$1
WDA_PATH="$ROOT_PATH"/WebDriverAgent/WebDriverAgent.xcodeproj
URL_HOST="http://localhost:$PORT/status"
SOURCE_HOST="http://localhost:$PORT/source"


print_success(){
  printf "\x1B[0;32m%s\n\x1B[0m" "$1"
}

print_faile(){
  printf "\x1B[0;31m%s\n\x1B[0m" "$1"
}

check_return() {
  value=$?
    if [ $value -ne 0 ]
    then
        print_faile "$1失败"
        exit 1
    else
        print_success "$1成功"
    fi
}

del_wda(){
  echo "删除 wda"
  isInstalled=$(ideviceinstaller -l | grep WebDriverAgentRunner);
  if [ -n "$isInstalled" ]; then
    ideviceinstaller -U com.layzui.test.xctrunner > /dev/null
    check_return '删除 wda'
  fi
}

clear_process_sys(){
  # 清理系统级进程
  CMD_LINE="ps -A | grep -v grep | grep $1 | grep $2 | awk '{print \$1}' | xargs kill -9"
  bash -c "$CMD_LINE"
  check_return "关闭$1:$2服务"
}

clear_port_service(){
  CMD_LINE="lsof -i:$1 | awk 'NR>1{print \$2}' | xargs kill -9"
  bash -c "$CMD_LINE"
  check_return "关闭$1端口服务"
}

clear_service(){
  id="id=$UDID"
  clear_process_sys xcodebuild "$id"
  clear_port_service $PORT
}

check_real_success(){
  retry_time=1
  while ((retry_time--)); do
    if ! check_wda_status; then
      return 1
    fi
    sleep 2
  done
  return 0
}

start_wda(){
  xcode_log="$1"/xcodebuild-"$2".log

  if ! [ -x "$WDA_PATH" ]; then
      print_faile "文件不存在:$WDA_PATH"
      exit 1
  fi
  # echo "xcodebuild -scheme WebDriverAgentRunner -destination \"id=$UDID\" -project \"$WDA_PATH\" test"
  # echo "xcodebuild -scheme WebDriverAgentRunner -destination \"id=$UDID\" -project "$WDA_PATH" test > "$xcode_log" 2>&1 &"
  for (( i = 1; i <= 5; i = i + 1 ))
  do
    echo "start wda service"
    if ((i == 2)); then
      del_wda
    fi
    # cmd="xcodebuild -scheme WebDriverAgentRunner -destination \"id=$UDID\" -project \"$WDA_PATH\" test > \"$xcode_log\" 2>&1"
    # nohup "$("$cmd")" &
    bash_file="$ROOT_PATH"/wda
    echo "nohup xcodebuild -scheme WebDriverAgentRunner -destination \"id=$UDID\" -project \"$WDA_PATH\" test > \"$xcode_log\" 2>&1 &" > "$bash_file"
    chmod 777 "$bash_file"
    bash -c "open -a Terminal.app $bash_file"
    # sh "$bash_file"
    # hup_file="$ROOT_PATH"/hup_file
    # nohup xcodebuild -scheme WebDriverAgentRunner -destination "id=$UDID" -project "$WDA_PATH" test > "$xcode_log" 2>&1 > "$hup_file" &
    # nohup xcodebuild -scheme WebDriverAgentRunner -destination "id=$UDID" -project "$WDA_PATH" test &
    rety_time=20
    sleep_time=3
    while ((rety_time > 0))
    do
      # echo -ne "#"
      printf "%s" "#"
      # is_start=$(tail -30 "$xcode_log" | grep ServerURLHere)
      # is_start=$(curl $URL_HOST -s | grep sessionId )
      # if [ -n "$is_start" ]; then
      if check_wda_status '#'; then
        break
      fi
      ((rety_time--))
      sleep $sleep_time
    done
    if check_real_success; then
        return 0
    fi
    echo '#'
  done
  print_faile '服务启动失败'
  # shellcheck disable=SC2242
  exit 1
}

start_proxy(){
  echo "start proxy service"
  iproxy_log="$1"/iproxy-"$2".log
  iproxy "$PORT" "$PORT" "$UDID" > "$iproxy_log" 2>&1 &
  print_success "start proxy success"
}

check_status(){
  echo 'check_status'
  CMD_LINE="ps -a | grep -v grep | grep xcodebuild | awk '{print \$1, \$8}'"
  xcode_status=$(bash -c "$CMD_LINE")
  echo "$xcode_status"
  strings=${xcode_status// / }
  echo "${strings[@]}"
  udids="${strings[1]}"
  echo "$udids"
  pid="${strings[0]}"
  echo "$pid"
  strings=("${udids//:/ }")
  udids="${strings[0]}"
  echo "$udids"
}

check_wda_status(){
  key=$1
  value=$(curl --connect-timeout 5 "$URL_HOST" -s | grep sessionId)
  if [ -n "$value" ]; then
    value=$(echo "$value"|sed 's/^[ \t]*//g')
    if [ -n "$key" ]; then
      echo "$key"
    fi
    echo "$value"
    return 0
  fi
  return 1
}

handle_service(){
  if check_wda_status ''; then
    start_bat "$log_dir" "$time"
    print_success "启动成功"
    echo "ServerURL:"
    echo "$URL_HOST "
    echo "$SOURCE_HOST"
    exit 0
  fi
}

handle_device(){
  if [ -z "$UDID" ]; then
    print_faile "没有找到任何设备,请重新插入"
    exit 1
  else
    echo "UDID:$UDID"
  fi
}

clear_process(){
  CMD_LINE="ps -a | grep -v grep | grep $1 | grep $2 | awk '{print \$1}' | xargs kill -9"
  bash -c "$CMD_LINE"
  check_return "关闭$1:$2服务"
}

start(){
  echo "-------------- 启动服务 --------------"
  handle_device

  time=$(date '+%Y-%m-%d %H:%M')
  log_dir="$ROOT_PATH"/log/
  mkdir -p "$log_dir"

  # 服务状态检查
  handle_service

  clear_service
  start_proxy "$log_dir" "$time"
  start_wda "$log_dir" "$time"

  echo "log path: $log_dir/log/"
  echo "ServerURL: $URL_HOST "
  print_success "启动成功"
  sleep 2
}

start



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容