# 使用Hypium实现ArkWeb自动化测试

## 概述

ArkWeb页面支持使用Hypium集成Selenium框架、ChromeDriver驱动进行UI自动化测试。

## 环境配置

1.Hypium环境搭建

参考：[应用UI测试（基于Python）](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hypium-python-guidelines)。

2.安装Selenium

Selenium主要用于Web应用程序的自动化测试，核心功能是模拟用户在浏览器中的操作，例如点击按钮、输入文本、导航页面等。

```shell
pip install selenium
```

3.集成ChromeDriver驱动

ChromeDriver充当了Selenium WebDriver和Web页面之间的中介。通过Selenium发送命令时，ChromeDriver会将这些命令转换为Web内核能够理解的协议，并将响应返回给Selenium。ArkWeb基于谷歌Chromium内核开发，系统版本与Chromium版本的对应关系参考：ArkWeb简介[约束与限制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-component-overview#约束与限制)。访问ChromeDriver官方网站[ChromeDriver下载|Chrome for Developers](https://developer.chrome.google.cn/docs/chromedriver/downloads?hl=zh-cn)，获取与Chromium版本对应的ChromeDriver。

首先将ChromeDriver集成到测试工程的resource文件夹下，然后调用WebDriverSetupTool类中的set_chromedriver_exe_path方法指定chromedriver可执行文件的完整路径（需指定到对应版本的可执行chromedriver文件），或者调用set_chromedriver_exe_search_path方法指定chromedriver所在文件夹的路径，Hypium将在该文件夹下按chromedriver_版本号的命名规则查找对应版本的chromedriver文件。

```python
self.web_tools = WebDriverSetupTool(self.driver)
# 使用set_chromedriver_exe_path指定chromedriver路径，需指定到对应版本的可执行chromedriver文件
self.web_tools.set_chromedriver_exe_path(r"D:\WebAutoTest\resource\web_debug_tools\chromedriver_132\chromedriver.exe")
```

```python
self.web_tools = WebDriverSetupTool(self.driver)
# 使用set_chromedriver_exe_search_path方法指定chromedriver所在文件夹，Hypium在指定的文件夹寻找对应版本的chromedriver文件
self.web_tools.set_chromedriver_exe_search_path(r"D:\WebAutoTest\resource\web_debug_tools")
```

> 说明
>
> * 使用set_chromedriver_exe_search_path方法指定chromedriver所在文件夹的路径时，下层文件夹命名规则为chromedriver_版本号，参考下图。
>
>   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9b/v3/V2WH_tY8RAOViJbEIMXuxw/zh-cn_image_0000002755023918.png?HW-CC-KV=V1&HW-CC-Date=20261009T092714Z&HW-CC-Expire=31536000000&HW-CC-Sign=9D0E5AC8201E3B73FC0A2BE76C4E4B819D2F865BC3C46BE97464B8F5B21B0636)

## 示例代码

参考以下代码完成ArkWeb页面的自动化测试，先初始化Selenium的webdriver，后通过webdriver与Web页面交互的API，实现导航页面、查找页面元素操作。

webdriver更多使用方法参考Selenium官方文档：[驱动会话 | Selenium](https://www.selenium.dev/zh-cn/documentation/webdriver/drivers/)。

```python
from devicetest.core.test_case import TestCase, Step, CheckPoint
from hypium import UiDriver, BY
from hypium.webdriver.webdriver_setup_tool import WebDriverSetupTool

class ArkWeb_AutoTests(TestCase):
    def __init__(self, configs):
        self.TAG = self.__class__.__name__
        TestCase.__init__(self, self.TAG, configs)
        self.driver = UiDriver(self.device1)
        self.driver_width, self.driver_height = self.driver.get_display_size()
        self.web_tools = WebDriverSetupTool(self.driver)
        # 设置chromedriver存放路径
        self.web_tools.set_chromedriver_exe_search_path(r"D:\WebAutoTest\resource\web_debug_tools")
        # 使用应用包名连接到指定应用的webview页面
        self.web_tools.connect("com.huawei.hmos.browser")
        # 初始化Selenium的webdriver
        self.web_driver = self.web_tools.driver

    def setup(self):
        pass
        
    def process(self):
        # 导航页面：使用Selenium的webdriver访问https://developer.huawei.com/网站
        self.web_driver.get("https://developer.huawei.com/")
        # 查找页面元素：使用Selenium的webdriver查找页面ID为th的元素
        self.web_driver.find_element(BY.ID, "th")

    def teardown(self):
        # 使用结束需要调用webdriver_setup_tool中的close方法关闭web_tools建立的连接
        self.web_tools.close()
```

