Skip to content

Commit d1d70b3

Browse files
Caicai000 master (for harmony) (#33)
* 适配harmony驱动 --------- Co-authored-by: lzw <306504989@qq.com>
1 parent 6b10234 commit d1d70b3

File tree

12 files changed

+335
-20
lines changed

12 files changed

+335
-20
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,5 @@ cython_debug/
160160
#.idea/
161161

162162
poetry.lock
163-
window_dump.xml
163+
window_dump.xml
164+
.DS_Store

e2etests/test_harmony_driver.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# coding: utf-8
2+
#
3+
# 参考:https://github.com/codematrixer/awesome-hdc
4+
5+
import pytest
6+
7+
from uiautodev.driver.harmony import HDC
8+
from uiautodev.driver.harmony import HarmonyDriver
9+
10+
@pytest.fixture
11+
def hdc() -> HDC:
12+
return HDC()
13+
14+
@pytest.fixture
15+
def serial(hdc: HDC) -> str:
16+
devices = hdc.list_device()
17+
assert len(devices) == 1
18+
return devices[0]
19+
20+
21+
def test_list_device(hdc: HDC):
22+
devices = hdc.list_device()
23+
assert len(devices) == 1
24+
25+
26+
def test_shell(hdc: HDC, serial: str):
27+
assert hdc.shell(serial, 'pwd') == '/'
28+
29+
def test_get_model(hdc: HDC, serial: str):
30+
assert hdc.get_model(serial) == 'ohos'
31+
32+
33+
def test_screenshot(hdc: HDC, serial: str):
34+
image = hdc.screenshot(serial)
35+
assert image is not None
36+
assert image.size is not None
37+
38+
39+
def test_dump_layout(hdc: HDC, serial: str):
40+
layout = hdc.dump_layout(serial)
41+
assert layout is not None
42+
assert isinstance(layout, dict)
43+
44+
45+
@pytest.fixture
46+
def driver(hdc: HDC, serial: str) -> HarmonyDriver:
47+
return HarmonyDriver(hdc, serial)
48+
49+
50+
def test_window_size(driver: HarmonyDriver):
51+
size = driver.window_size()
52+
assert size.width > 0
53+
assert size.height > 0
54+
55+
56+
def test_dump_hierarchy(driver: HarmonyDriver):
57+
xml, hierarchy = driver.dump_hierarchy()
58+
assert xml is not None
59+
assert hierarchy is not None

uiautodev/app.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
from pathlib import Path
1212
from typing import List
1313

14+
import uvicorn
1415
from fastapi import FastAPI, File, UploadFile
1516
from fastapi.middleware.cors import CORSMiddleware
1617
from fastapi.responses import FileResponse, JSONResponse, RedirectResponse
1718
from pydantic import BaseModel
18-
import uvicorn
1919

2020
from uiautodev import __version__
2121
from uiautodev.common import convert_bytes_to_image, get_webpage_url, ocr_image
2222
from uiautodev.model import Node
23-
from uiautodev.provider import AndroidProvider, IOSProvider, MockProvider
23+
from uiautodev.provider import AndroidProvider, HarmonyProvider, IOSProvider, MockProvider
2424
from uiautodev.router.device import make_router
2525
from uiautodev.router.xml import router as xml_router
2626
from uiautodev.utils.envutils import Environment
@@ -39,16 +39,19 @@
3939

4040
android_router = make_router(AndroidProvider())
4141
ios_router = make_router(IOSProvider())
42+
harmony_router = make_router(HarmonyProvider())
4243
mock_router = make_router(MockProvider())
4344

4445
app.include_router(mock_router, prefix="/api/mock", tags=["mock"])
4546

4647
if Environment.UIAUTODEV_MOCK:
4748
app.include_router(mock_router, prefix="/api/android", tags=["mock"])
4849
app.include_router(mock_router, prefix="/api/ios", tags=["mock"])
50+
app.include_router(mock_router, prefix="/api/harmony", tags=["mock"])
4951
else:
5052
app.include_router(android_router, prefix="/api/android", tags=["android"])
5153
app.include_router(ios_router, prefix="/api/ios", tags=["ios"])
54+
app.include_router(harmony_router, prefix="/api/harmony", tags=["harmony"])
5255

5356
app.include_router(xml_router, prefix="/api/xml", tags=["xml"])
5457

@@ -61,6 +64,7 @@ class InfoResponse(BaseModel):
6164
cwd: str
6265
drivers: List[str]
6366

67+
6468
@app.get("/api/info")
6569
def info() -> InfoResponse:
6670
"""Information about the application"""
@@ -70,16 +74,18 @@ def info() -> InfoResponse:
7074
platform=platform.system(), # Linux | Darwin | Windows
7175
code_language="Python",
7276
cwd=os.getcwd(),
73-
drivers=["android", "ios"],
77+
drivers=["android", "ios", "harmony"],
7478
)
7579

80+
7681
@app.post('/api/ocr_image')
7782
async def _ocr_image(file: UploadFile = File(...)) -> List[Node]:
7883
"""OCR an image"""
7984
image_data = await file.read()
8085
image = convert_bytes_to_image(image_data)
8186
return ocr_image(image)
8287

88+
8389
@app.get("/shutdown")
8490
def shutdown() -> str:
8591
"""Shutdown the server"""
@@ -88,7 +94,7 @@ def shutdown() -> str:
8894

8995

9096
@app.get("/demo")
91-
def demo() -> str:
97+
def demo():
9298
"""Demo endpoint"""
9399
static_dir = Path(__file__).parent / "static"
94100
print(static_dir / "demo.html")
@@ -104,4 +110,4 @@ def index_redirect():
104110

105111

106112
if __name__ == '__main__':
107-
uvicorn.run("uiautodev.app:app", port=4000, reload=True, use_colors=True)
113+
uvicorn.run("uiautodev.app:app", port=4000, reload=True, use_colors=True)

uiautodev/command_proxy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
WindowSizeResponse
1818
from uiautodev.driver.base_driver import BaseDriver
1919
from uiautodev.exceptions import ElementNotFoundError
20-
from uiautodev.model import Node, AppInfo
20+
from uiautodev.model import AppInfo, Node
2121
from uiautodev.utils.common import node_travel
2222

2323
COMMANDS: Dict[Command, Callable] = {}

uiautodev/common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import locale
1010
import logging
1111
from typing import List
12+
1213
from PIL import Image
1314

1415
from uiautodev.model import Node, OCRNode

uiautodev/driver/android.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from uiautodev.command_types import CurrentAppResponse
1919
from uiautodev.driver.base_driver import BaseDriver
2020
from uiautodev.exceptions import AndroidDriverException, RequestError
21-
from uiautodev.model import Node, AppInfo, Rect, ShellResponse, WindowSize
21+
from uiautodev.model import AppInfo, Node, Rect, ShellResponse, WindowSize
2222
from uiautodev.utils.common import fetch_through_socket
2323

2424
logger = logging.getLogger(__name__)

uiautodev/driver/base_driver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from pydantic import BaseModel
1212

1313
from uiautodev.command_types import CurrentAppResponse
14-
from uiautodev.model import Node, AppInfo, ShellResponse, WindowSize
14+
from uiautodev.model import AppInfo, Node, ShellResponse, WindowSize
1515

1616

1717
class BaseDriver(abc.ABC):

0 commit comments

Comments
 (0)