45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT / "scripts"))
|
|
|
|
from service.desktop_session import ( # noqa: E402
|
|
DesktopRpaError,
|
|
WindowCandidate,
|
|
resolve_unique_window,
|
|
)
|
|
from util.selectors import MAIN_WINDOW # noqa: E402
|
|
|
|
|
|
class SelectorContractTest(unittest.TestCase):
|
|
def test_unique_window_is_required(self) -> None:
|
|
candidate = WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", True)
|
|
self.assertEqual(
|
|
resolve_unique_window(MAIN_WINDOW, candidates=[candidate]),
|
|
candidate,
|
|
)
|
|
|
|
def test_duplicate_windows_fail_instead_of_taking_first(self) -> None:
|
|
candidates = [
|
|
WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", True),
|
|
WindowCandidate(2, 11, "WXWork", "WeWorkWindow", "企业微信", True),
|
|
]
|
|
with self.assertRaises(DesktopRpaError) as ctx:
|
|
resolve_unique_window(MAIN_WINDOW, candidates=candidates)
|
|
self.assertEqual(ctx.exception.code, "ELEMENT_AMBIGUOUS")
|
|
|
|
def test_hidden_window_is_not_a_candidate(self) -> None:
|
|
hidden = WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", False)
|
|
with self.assertRaises(DesktopRpaError) as ctx:
|
|
resolve_unique_window(MAIN_WINDOW, candidates=[hidden])
|
|
self.assertEqual(ctx.exception.code, "WINDOW_NOT_FOUND")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|