14514f5e3Sopenharmony_ci#!/usr/bin/env python
24514f5e3Sopenharmony_ci# -*- coding: utf-8 -*-
34514f5e3Sopenharmony_ci
44514f5e3Sopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd.
54514f5e3Sopenharmony_ci#
64514f5e3Sopenharmony_ci# HDF is dual licensed: you can use it either under the terms of
74514f5e3Sopenharmony_ci# the GPL, or the BSD license, at your option.
84514f5e3Sopenharmony_ci# See the LICENSE file in the root of this repository for complete details.
94514f5e3Sopenharmony_ci
104514f5e3Sopenharmony_ciimport os
114514f5e3Sopenharmony_ciimport shutil
124514f5e3Sopenharmony_cifrom http.server import SimpleHTTPRequestHandler
134514f5e3Sopenharmony_ciimport socketserver
144514f5e3Sopenharmony_ciimport threading
154514f5e3Sopenharmony_cifrom selenium import webdriver
164514f5e3Sopenharmony_cifrom selenium.webdriver.common.action_chains import ActionChains
174514f5e3Sopenharmony_ciimport time
184514f5e3Sopenharmony_ciimport easyocr
194514f5e3Sopenharmony_ciimport nltk
204514f5e3Sopenharmony_ciimport cv2
214514f5e3Sopenharmony_ciimport tempfile
224514f5e3Sopenharmony_ciimport pytest
234514f5e3Sopenharmony_ciimport subprocess
244514f5e3Sopenharmony_ci
254514f5e3Sopenharmony_ciweb_path = os.path.realpath("../dist")
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_ci
284514f5e3Sopenharmony_ciclass MyHttpRequestHandler(SimpleHTTPRequestHandler):
294514f5e3Sopenharmony_ci    def __init__(self, *args, **kwargs):
304514f5e3Sopenharmony_ci        super().__init__(*args, directory=web_path, **kwargs)
314514f5e3Sopenharmony_ci
324514f5e3Sopenharmony_ci
334514f5e3Sopenharmony_cihttpd = socketserver.TCPServer(("", 9999), MyHttpRequestHandler)
344514f5e3Sopenharmony_cidriver = webdriver.Chrome()
354514f5e3Sopenharmony_ciactions = ActionChains(driver)
364514f5e3Sopenharmony_cireader = easyocr.Reader(['ch_sim', 'en'], verbose=False)
374514f5e3Sopenharmony_ciwindow_width = -1
384514f5e3Sopenharmony_ciwindow_height = -1
394514f5e3Sopenharmony_citemp_image_file = os.path.join(tempfile.gettempdir(), "test.png")
404514f5e3Sopenharmony_ci
414514f5e3Sopenharmony_ci
424514f5e3Sopenharmony_cidef cut_image(image, x, y, w, h):
434514f5e3Sopenharmony_ci    x = int(x)
444514f5e3Sopenharmony_ci    y = int(y)
454514f5e3Sopenharmony_ci    return image[y:y + h, x:x + w]
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_ci
484514f5e3Sopenharmony_cioldx = 0
494514f5e3Sopenharmony_cioldy = 0
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_ci
524514f5e3Sopenharmony_cidef click_on_page(x, y):
534514f5e3Sopenharmony_ci    global oldx, oldy
544514f5e3Sopenharmony_ci    actions.move_by_offset(x - oldx, y - oldy).click().perform()
554514f5e3Sopenharmony_ci    oldx = x
564514f5e3Sopenharmony_ci    oldy = y
574514f5e3Sopenharmony_ci    time.sleep(1)
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_ci
604514f5e3Sopenharmony_cidef setup():
614514f5e3Sopenharmony_ci    os.chdir("..")
624514f5e3Sopenharmony_ci
634514f5e3Sopenharmony_ci    print("setup : 编译项目")
644514f5e3Sopenharmony_ci    subprocess.run(["npm", "run", "dist"])
654514f5e3Sopenharmony_ci
664514f5e3Sopenharmony_ci    print("setup : 拷贝测试文件")
674514f5e3Sopenharmony_ci    shutil.copy("examples/log_loop.txt", "dist/test.txt")
684514f5e3Sopenharmony_ci
694514f5e3Sopenharmony_ci    print("setup : 启动web服务")
704514f5e3Sopenharmony_ci    threading.Thread(target=httpd.serve_forever).start()
714514f5e3Sopenharmony_ci
724514f5e3Sopenharmony_ci    print("setup : selenium打开测试页面")
734514f5e3Sopenharmony_ci    driver.implicitly_wait(10)
744514f5e3Sopenharmony_ci    driver.get("http://127.0.0.1:9999")
754514f5e3Sopenharmony_ci    global window_width, window_height
764514f5e3Sopenharmony_ci    window_width = driver.execute_script("return document.body.clientWidth")
774514f5e3Sopenharmony_ci    window_height = driver.execute_script("return document.body.clientHeight")
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_ci
804514f5e3Sopenharmony_cidef teardown():
814514f5e3Sopenharmony_ci    print("teardown : 关闭selenium")
824514f5e3Sopenharmony_ci    driver.close()
834514f5e3Sopenharmony_ci
844514f5e3Sopenharmony_ci    print("teardown : 关闭web服务")
854514f5e3Sopenharmony_ci    httpd.shutdown()
864514f5e3Sopenharmony_ci
874514f5e3Sopenharmony_ci
884514f5e3Sopenharmony_cidef test_loading():  # 验证载入中画面
894514f5e3Sopenharmony_ci    driver.get_screenshot_as_file(temp_image_file)
904514f5e3Sopenharmony_ci    image = cv2.imread(temp_image_file)
914514f5e3Sopenharmony_ci    result = reader.readtext(cut_image(image, window_width / 2 - 100, window_height / 2 - 20, 200, 40))
924514f5e3Sopenharmony_ci    assert result[0][1][:7] == "Loading"
934514f5e3Sopenharmony_ci
944514f5e3Sopenharmony_ci
954514f5e3Sopenharmony_cidef test_start():  # 验证主画面显示
964514f5e3Sopenharmony_ci    time.sleep(5)
974514f5e3Sopenharmony_ci    driver.get_screenshot_as_file(temp_image_file)
984514f5e3Sopenharmony_ci    image = cv2.imread(temp_image_file)
994514f5e3Sopenharmony_ci    result = reader.readtext(cut_image(image, 10, 100, 60, 20))
1004514f5e3Sopenharmony_ci    assert result[0][1] == "隐藏选中"
1014514f5e3Sopenharmony_ci
1024514f5e3Sopenharmony_ci
1034514f5e3Sopenharmony_cidef find_string_in_result(s, result):
1044514f5e3Sopenharmony_ci    dis = 999
1054514f5e3Sopenharmony_ci    p = -1
1064514f5e3Sopenharmony_ci    for i, r in enumerate(result):
1074514f5e3Sopenharmony_ci        d = nltk.edit_distance(r[1], s)
1084514f5e3Sopenharmony_ci        if d < dis:
1094514f5e3Sopenharmony_ci            dis = d
1104514f5e3Sopenharmony_ci            p = i
1114514f5e3Sopenharmony_ci    if dis < len(s) / 2:
1124514f5e3Sopenharmony_ci        return result[p]
1134514f5e3Sopenharmony_ci    return False
1144514f5e3Sopenharmony_ci
1154514f5e3Sopenharmony_ci
1164514f5e3Sopenharmony_cidef test_selectfunc():  # 点击优化类型切换下拉菜单,选择优化类型
1174514f5e3Sopenharmony_ci    click_on_page(420, 50)
1184514f5e3Sopenharmony_ci    click_on_page(420, 150)
1194514f5e3Sopenharmony_ci
1204514f5e3Sopenharmony_ci    driver.get_screenshot_as_file(temp_image_file)
1214514f5e3Sopenharmony_ci    image = cv2.imread(temp_image_file)
1224514f5e3Sopenharmony_ci    result = reader.readtext(image)
1234514f5e3Sopenharmony_ci    ret = find_string_in_result("0,CIRCUIT_ROOT", result)
1244514f5e3Sopenharmony_ci    assert ret != False
1254514f5e3Sopenharmony_ci
1264514f5e3Sopenharmony_ci
1274514f5e3Sopenharmony_cidef test_hide():  # 点击state和root按钮,隐藏0,CIRCUIT_ROOT
1284514f5e3Sopenharmony_ci    click_on_page(40, 80)
1294514f5e3Sopenharmony_ci    click_on_page(350, 80)
1304514f5e3Sopenharmony_ci
1314514f5e3Sopenharmony_ci    driver.get_screenshot_as_file(temp_image_file)
1324514f5e3Sopenharmony_ci    image = cv2.imread(temp_image_file)
1334514f5e3Sopenharmony_ci    result = reader.readtext(image)
1344514f5e3Sopenharmony_ci    ret = find_string_in_result("0,CIRCUIT_ROOT", result)
1354514f5e3Sopenharmony_ci    assert ret == False
1364514f5e3Sopenharmony_ci
1374514f5e3Sopenharmony_ci
1384514f5e3Sopenharmony_cidef test_wait():
1394514f5e3Sopenharmony_ci    time.sleep(10)
140