TestTranslator / lib /pages.py
yujuanqin's picture
Use Spaces to connect paragraphs in English
ffcba68
from datetime import datetime
from time import sleep
from typing import List
from playwright.sync_api import Page
from lib.log_parser import WebItem
class TranslatorPage:
def __init__(self, page:Page):
self.page = page
@property
def _switch(self):
return self.page.get_by_role("switch")
@property
def _trans_selector(self):
return self.page.locator(".ant-select-selector")
def start(self, translation_lang):
if translation_lang == "zh2en":
self.start_zh2en()
elif translation_lang == "en2zh":
self.start_en2zh()
else:
raise TypeError(f"invalid translation_lang: {translation_lang}")
def start_zh2en(self):
self._trans_selector.click()
self.page.locator(".ant-select-item").get_by_text("Chinese -> English").click()
self.set_on()
print("page started zh2en translation")
def start_en2zh(self):
self._trans_selector.click()
self.page.locator(".ant-select-item").get_by_text("English -> Chinese").click()
self.set_on()
print("page started en2zh translation")
def _is_on(self):
state = self._switch.get_attribute("aria-checked")
return True if state=="true" else False
def set_on(self):
if not self._is_on():
self._switch.click()
print("click button to set translation on")
def set_off(self):
if self._is_on():
self._switch.click()
print("click button to set translation off")
def get_current_node_text(self, duration=0, interval=0.05)-> List[WebItem]:
"""在一定时间内持续读取页面最新的 node的内容"""
print(f"capture page latest content for duration: {duration}s")
translate_items = []
last_src, last_dst = None, None
for i in range(int(duration // interval) + 1):
current_node = self.page.locator(".trans-list").locator(".current_node")
src_lang = current_node.locator(".trans-src-lang").inner_text()
dst_lang = current_node.locator(".trans-dst-lang").inner_text()
tsp = datetime.now()
sleep(interval)
if src_lang == last_src and dst_lang == last_dst:
continue
# print("src lang:", src_lang)
# print("dst lang:", dst_lang)
translate_items.append(WebItem(tsp, src_lang, dst_lang))
last_src, last_dst = src_lang, dst_lang
print(f"capture page latest content finished")
return translate_items
def get_translated_texts(self, translation_lang):
src_all = self.page.locator(".trans-list").locator(".trans-src-lang").all_inner_texts()
dst_all = self.page.locator(".trans-list").locator(".trans-dst-lang").all_inner_texts()
# 使用空格连接英文的不同段落
if translation_lang == "zh2en":
return "".join(src_all), " ".join(dst_all)
elif translation_lang == "en2zh":
return " ".join(src_all), "".join(dst_all)
return "".join(src_all), "".join(dst_all)