使用Python启动appium

这篇文章详细介绍了如何通过Python脚本启动和管理Appium服务器,包括桌面版和命令行服务版的启动方式,以及通过Python的os和subprocess模块来执行命令。同时,文中还涉及了端口指定、日志保存路径、进程关闭以及自动化测试的相关设置,如使用pytest框架。
摘要由CSDN通过智能技术生成

import os

import subprocess

import multiprocessing

import time

import pytest

from appium import webdriver

from selenium.webdriver.support.wait import WebDriverWait

from time import sleep

# 关于appium的启动

# 1、桌面版(咱们现在用的):

# 运行方式一:点击软件图标

# 运行方式二:

# cmd命令行运行appium:

# appium的路径:C:/Users/jeff.xie/AppData/Roaming/npm/node_modules/appium/build/lib

# ①CD切换上的路径

# ②dir(列出文件)

# ③找到main.js后执行node main.js

# 参数 -p:指定端口

# 参数 -g:指定保存appium日志文件的路径

# node main.js -g D:\appium_log\log.log

# 2、服务版(命令行启动)

# cmd中输入appium命令即可启动

# 参数 -p:指定端口

# 参数 -g:指定保存appium日志文件的路径

# 3、通过python代码启动appium

# ①main.js路径下执行命令:node main.js

# ②通过端口查找进行id:netstat -ano|findstr端口

# ③关闭进程:taskkill /F /PID进程id

# 切换到appium的main.js所在路径

main_js_path= r"C:/Users/jeff.xie/AppData/Roaming/npm/node_modules/appium/build/lib";

os.chdir(main_js_path)

# 执行cmd命令

# os.system('node main.js')

os.system(r'node main.js -p 7890 -g D:\appium_log\log')

# 注意点:os.system会堵塞代码继续往下执行

# 执行测试代码(直接这样运行测试时不行的)

# pytest.main()

print("aaaa")

def start_appium():

"""启动appium"""

# 使用另外的模块

# appium_server_path = r'C:\Users\Admin\AppData\Local\Programs\Appium' \

# r'\resources\app\node_modules\appium\build\lib\main.js'

os.chdir(main_js_path)

port = 4723

appium_log_path = r'D:\appium_log\log{}.log'.format(port)

subprocess.Popen('node main.js -p {} -g {}'.format(port, appium_log_path),

stdout=subprocess.STDOUT,

stderr=subprocess.PIPE,

shell=True).communicate()

sleep(10)

print("KKKKKKK")

desired_caps = {}

# 系统

desired_caps['platformName'] = 'Android'

#手机版本,在手机中:设置--关于手机 #命令行获取手机的版本号:adb -s da79fc70 shell getprop ro.build.version.release

desired_caps['platformVersion'] = '10'

# 设备号 adb devices

desired_caps['deviceName'] = 'emulator-5554'

# 包名 命令行获取包名和启动名:adb shell dumpsys window windows | findstr mFocusedApp

desired_caps['appPackage'] = 'com.android.settings'

# 启动名

desired_caps['appActivity'] = 'com.android.settings.Settings'

desired_caps["resetKeyboard"] = "True"#程序结束时重置原来的输入法

desired_caps["noReset"] = "True"#不初始化手机app信息(类似不清除缓存)

# 声明手机驱动对象

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

WebDriverWait(driver,60)

sleep(2)

print("Open app")

sleep(10)

driver.update_settings({"getMatchedImageResult": True})

el = driver.find_element_by_image('D:/Battery.png')

el.click();

if __name__ == '__main__':

# 创建一个进程去启动appium

p = multiprocessing.Process(target=start_appium)

p.start()

time.sleep(10)

# 运行测试用例

pytest.main()

  1. """

  1. appium启动/关闭处理类

  1. """

  1. import subprocess

  1. import os,sys

  1. import time

  1. def stop_appium(port):

  1. mac_cmd = f"lsof -i tcp:{port}"

  1. win_cmd = f"netstat -ano | findstr {port}"

  1. # 判断操作系统

  1. os_platform = sys.platform

  1. print('操作系统:',os_platform)

  1. # #windows 系统

  1. if os_platform == "win32":

  1. win_p = subprocess.Popen(win_cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

  1. for line in win_p.stdout.readlines():

  1. if line:

  1. line = line.decode('utf8')

  1. if "LISTENING" in line:

  1. win_pid = line.split("LISTENING")[1].strip()

  1. os.system(f"taskkill -f -pid {win_pid}")

  1. else:

  1. # unix系统

  1. p = subprocess.Popen(mac_cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

  1. for line in p.stdout.readlines():

  1. line = line.decode('utf8')

  1. if "node" in line:

  1. stdoutline = line.split(" ")

  1. # print(stdoutline)

  1. pid = stdoutline[4]

  1. os.system(f"kill {pid}")

  1. def start_appium(port):

  1. """

  1. 启动appium 服务

  1. :param port: 服务的端口号

  1. :return:

  1. """

  1. stop_appium(port)

  1. cmd = f"appium -p {port}"

  1. logsdir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "logs")

  1. appium_logs = os.path.join(logsdir,"appium-logs")

  1. if not os.path.exists(appium_logs):

  1. os.mkdir(appium_logs)

  1. log_name = str(port) + '-' + time.strftime('%Y_%m_%d') +".log"

  1. appium_logs_dirName = os.path.join(appium_logs,log_name)

  1. subprocess.Popen(cmd, shell=True, stdout=open(appium_logs_dirName, mode='a', encoding="utf8"),

  1. stderr=subprocess.PIPE)

  1. # # 单个方法调试代码

  1. if __name__ == '__main__':

  1. start_appium(4723)

  1. stop_appium(4723)

### 回答1: 可以通过命令行或编写脚本来启动Appium Server。 命令行启动: 1. 打开命令提示符/终端 2. 输入 `appium` 并回车 编写脚本启动: 1. 新建一个文件,如 start_appium.py 2. 在文件中粘贴以下代码: ```python from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['deviceName'] = 'Android Emulator' desired_caps['app'] = PATH_TO_YOUR_APP # replace with the path to your .apk file driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` 3. 保存文件并在命令提示符/终端中运行 `python start_appium.py`。 这样,Appium Server 就启动了,并准备好接收来自客户端的请求。 ### 回答2: 启动 Appium 服务器是通过 Python 的 subprocess 模块来实现的。以下是启动 Appium 服务器的示例代码: ```python import subprocess def start_appium_server(): appium_command = "appium" # 定义启动 Appium 服务器的命令 appium_arguments = ["--log-level", "error", "--port", "4723"] # 定义命令行参数,例如设置日志级别为 error,端口号为 4723 # 使用 subprocess 模块启动 Appium 服务appium_process = subprocess.Popen([appium_command] + appium_arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 获取启动输出信息 stdout, stderr = appium_process.communicate() # 检查启动是否成功 if appium_process.returncode == 0: print("Appium 服务启动成功!") else: print("Appium 服务启动失败,错误信息:", stderr.decode("utf-8")) # 调用启动函数 start_appium_server() ``` 以上代码会使用 `subprocess.Popen` 函数来启动 Appium 服务器,并通过 `communicate` 方法获取启动信息。启动成功时,会打印 "Appium 服务启动成功!",否则会打印 "Appium 服务启动失败" 并输出错误信息。 需要注意的是,确保在 Python 环境中已经安装了 Appium,并将其路径添加到系统的环境变量中。 ### 回答3: 要启动Appium Server,我们需要先安装AppiumPython的相关库。以下是启动Appium Server的步骤: 1. 首先,确保已经安装了Python和pip(Python的包管理工具)。 2. 打开终端或命令提示符,使用以下命令安装AppiumPython客户端库: ``` pip install Appium-Python-Client ``` 3. 安装完库后,在Python脚本中导入Appium库: ``` from appium import webdriver ``` 4. 设置Appium Server的相关参数,例如设备名称、平台版本、App package和App activity等。可以使用字典的形式将这些参数传递给webdriver.Remote()方法。 ``` desired_caps = { 'platformName': 'Android', 'platformVersion': '9', 'deviceName': 'Android Emulator', 'appPackage': 'com.example.myapp', 'appActivity': 'com.example.myapp.MainActivity' } ``` 5. 使用以下代码启动Appium Server,并传递之前设置好的参数: ``` driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` 6. 最后,可以通过driver对象来执行各种App测试操作。 ``` # 例如点击按钮 button = driver.find_element_by_id("com.example.myapp:id/button") button.click() # 或者输入文本 text_input = driver.find_element_by_id("com.example.myapp:id/text_input") text_input.send_keys("Hello, World!") ``` 这样,我们就成功启动Appium Server,并使用Python来控制和测试App。记得在执行脚本之前,确保已经启动Appium Server。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值