Appium是移动端自动化测试非常有力的工具,那么对于在鸿蒙设备上自动化测试鸿蒙应用的支持情况如何呢?让我们一起实践看看吧。本文适用于有基础的appium安卓自动化测试经验的读者。
appium连接
首先在连接的初始化设置上,与Android对比有少许区别,下图这样配置可以成功连接操作鸿蒙设备和鸿蒙应用。
class BaseTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.desired_caps = initDevices()
uninstallApp(cls.desired_caps['udid'], cls.PACKAGE_NAME)
installApp(cls.desired_caps['udid'], cls.apk_path)
cls.desired_caps['appPackage'] = cls.PACKAGE_NAME
cls.desired_caps['platformName'] = 'Android'
cls.desired_caps['noReset'] = True
cls.desired_caps['appActivity'] = 'MainAbilityShellActivity' #dumpsys activity | grep -i run |grep 360
cls.desired_caps['newCommandTimeout'] = "2000"
cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', cls.desired_caps)
cls.driver.implicitly_wait(10)
**apk_path:**被测鸿蒙应用安装文件xxx.hap的路径。注意填写在这里只是记录路径,appium不支持安装.hap包
**platformName:**可以继续填写Andorid
**appActivity:**即启动打开的页面,可以通过dumpsys activity获取
安装和卸载.hap包
在鸿蒙设备上安装或卸载鸿蒙应用的.hap包,则需要用到hdc命令。
HDC(OpenHarmony Device Connector) 是为开发人员提供的用于设备连接调试的命令行工具,pc端开发机使用命令行工具hdc_std(为方便起见,下文统称hdc),该工具支持部署在Windows/Linux/Mac等系统与OpenHarmony\HarmonyOS设备(或模拟器)进行连接调试通信。
如果你熟悉Android开发,那么一定对adb不会陌生。有关hdc的内容,详见:
hdc支持的命令有:
def installApp(serialNum, packageName):
try:
if "Success" in subprocess.check_output("hdc -t {} app install {}"
.format(serialNum, packageName),shell=True):
print(u"安装成功")
return True
else:
print(u"安装失败")
return False
except:
print(u"安装失败")
return False
def uninstallApp(serialNum, packageName):
try:
if "Success" in subprocess.check_output("hdc -t {} app uninstall {}"
.format(serialNum, packageName)):
print(u"卸载成功")
return True
else:
print(u"未安装该应用")
except:
pass
关于如何打包一个签名的可安装到真机的.hap包,可参考
https://baijiahao.baidu.com/s?id=1718025528193522223&wfr=spider&for=pc
元素定位
self.driver.find_element_by_id(BaseTests.PACKAGE_NAME + ":id/"+id).click()
而对于鸿蒙应用,则需要这样使用,参数直接填写id即可:
self.driver.find_element_by_id(id).click() #单击按键
self.driver.find_element_by_id("Id_text_field").send_keys("hello123") #输入框输入
org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session
this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator','name'];
这样就可以通过name定位鸿蒙app的元素了:
self.driver.find_element_by_name("Flush").click()
获取日志
HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用打印日志,记录用户操作、系统运行状态等。在测试Android设备时,我们可以通过driver.get_log(“logcat”)获取logcat日志。如果直接传入参数“hilog”显然是不能捕获鸿蒙的hilog日志的,因为appium不支持,会出现如下错误:
需要使用hdc hilog命令获取日志,可参考:
order = 'hdc hilog'
pi = subprocess.Popen(order, shell=True, stdout=subprocess.PIPE)
for i in iter(pi.stdout.readline, 'b'):
print(i)
其它常用操作,如
self.driver.close_app()
self.driver.launch_app()
self.driver.hide_keyboard()
self.driver.background_app(5)
……,可正常使用。
不能实现的操作,则需要我们根据鸿蒙的特性和提供的相应开发工具去解决。
兼容性测试
现在部分真机平台还不支持上传和安装.hap包,或者支持的话需要添加真机设备uid至证书才能安装。
可以选择在这个官方地址
https://cn.devecostudio.huawei.com/console/testservice/remote
进行真机租用,不需要修改证书和添加uid,直接上传我们的.hap包即可安装,非常方便。可满足初步的兼容性测试需求。
以上是在鸿蒙应用自动化测试方面的初步实践,欢迎大家留言讨论。
参考文献
转发自 360质量效能