1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4# Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. 5# 6# HDF is dual licensed: you can use it either under the terms of 7# the GPL, or the BSD license, at your option. 8# See the LICENSE file in the root of this repository for complete details. 9 10from re import finditer 11import os 12import time 13 14import easyocr 15 16from PIL import Image 17from selenium.webdriver.common.keys import Keys 18from selenium.webdriver.support.wait import WebDriverWait 19from selenium.webdriver.support import expected_conditions as EC 20from selenium.webdriver.common.action_chains import ActionChains 21 22 23class Base: 24 25 def __init__(self, driver): 26 self.driver = driver 27 self.timeout = 10 28 self.t = 0.5 29 30 def find_element(self, locator): 31 if not isinstance(locator, tuple): 32 print('The type of the locator parameter is tuple') 33 else: 34 ele = WebDriverWait(self.driver, self.timeout, self.t).until( 35 EC.presence_of_element_located(locator)) 36 return ele 37 38 # Get URL address 39 @staticmethod 40 def getfiledir(): 41 os.chdir('../../') 42 cur_file = os.getcwd() 43 path = cur_file.replace('\\', '/') 44 url = "file:///{}/index.html".format(path) 45 os.chdir('test/testsuits') 46 return url 47 48 # Enter text information 49 def sendkeys(self, locator, text=''): 50 ele = self.find_element(locator) 51 ele.clear() 52 ele.send_keys(text) 53 54 def click(self, locator): 55 ele = self.find_element(locator) 56 ele.click() 57 58 def get_attribute(self, locator, name): 59 try: 60 element = self.find_element(locator) 61 return element.get_attribute(name) 62 except BaseException: 63 return "" 64 finally: 65 pass 66 67 def click_canvas_point(self, el, x, y): 68 actions = ActionChains(self.driver) 69 actions.move_to_element_with_offset(el, x, y).click().perform() 70 71 def click_canvas_by_text(self, text): 72 # text:Click on the text 73 el = self.find_element(('id', 'visual_area')) 74 loc = self.get_canvas_point_position('./Program_pictures/quanping.png', 75 text) 76 actions = ActionChains(self.driver) 77 actions.move_to_element_with_offset(el, loc[0], 78 loc[1]).click().perform() 79 80 def canvas_copy(self): 81 actions = ActionChains(self.driver) 82 actions.key_down(Keys.CONTROL).send_keys('c').key_up( 83 Keys.CONTROL).perform() 84 85 def canvas_paste(self): 86 actions = ActionChains(self.driver) 87 actions.key_down(Keys.CONTROL).send_keys('v').key_up( 88 Keys.CONTROL).perform() 89 90 def get_canvas_point_position(self, path, text): 91 # path:Storage address of screenshot text:The text content to look up 92 self.driver.get_screenshot_as_file(path) 93 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 94 result = reader.readtext(path) 95 print("############", result) 96 loc_x_min = loc_x_max = loc_y_min = loc_y_max = 0 97 for i in result: 98 # The text in the recognition figure is prone to case error. 99 # Compare the two texts in lower case to avoid the problem 100 if i[1].lower() == text.lower(): 101 loc_x_min = i[0][0][0] 102 loc_x_max = i[0][1][0] 103 loc_y_min = i[0][0][1] 104 loc_y_max = i[0][2][1] 105 break 106 loc_x = (loc_x_min + loc_x_max) / 2 107 loc_y = (loc_y_min + loc_y_max) / 2 108 return (loc_x, loc_y) 109 110 def get_obtain_point_position(self, path, text): 111 # path:Storage address of screenshot text:The text content to look up 112 self.driver.get_screenshot_as_file(path) 113 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 114 result = reader.readtext(path) 115 print("************************", result) 116 loc_x_min = loc_x_max = loc_y_min = loc_y_max = 0 117 for i in result: 118 # The text in the recognition figure is prone to case error. 119 # Compare the two texts in lower case to avoid the problem 120 if text in i[1].lower(): 121 loc_x_min = i[0][0][0] 122 loc_x_max = i[0][1][0] 123 loc_y_min = i[0][0][1] 124 loc_y_max = i[0][2][1] 125 break 126 loc_x = (loc_x_min + loc_x_max) / 2 127 loc_y = (loc_y_min + loc_y_max) / 2 128 return (loc_x, loc_y) 129 130 def add_node(self, text): 131 # text:Name of the child node to be added 132 el = self.find_element(('id', 'visual_area')) 133 loc = self.get_canvas_point_position('./Program_pictures/quanping.png', 134 text) 135 self.click_canvas_point(el, loc[0], loc[1]) 136 time.sleep(1) 137 self.click(('id', 'add_child_node')) 138 loc1 = self.get_canvas_point_position('./Program_pictures/addnode.png', 139 'node') 140 self.click_canvas_point(el, loc1[0], loc1[1]) 141 return loc1 142 143 def add_attr(self, text): 144 # text:Name of the child attr to be added 145 el = self.find_element(('id', 'visual_area')) 146 loc = self.get_canvas_point_position('./Program_pictures/quanping.png', 147 text) 148 self.click_canvas_point(el, loc[0], loc[1]) 149 self.click(('id', 'add_child_attr')) 150 self.driver.get_screenshot_as_file('./Program_pictures/addattr.png') 151 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 152 result = reader.readtext('./Program_pictures/addattr.png') 153 loc_x_min = loc_x_max = loc_y_min = loc_y_max = 0 154 for i in result: 155 # Query the location of the node whose initial letter is A (there is no node whose initial letter 156 # is A on the current page, but the name of the node whose new attribute is attr_1). 157 if 'a' == i[1].lower()[0]: 158 loc_x_min = i[0][0][0] 159 loc_x_max = i[0][1][0] 160 loc_y_min = i[0][0][1] 161 loc_y_max = i[0][2][1] 162 break 163 loc_x = (loc_x_min + loc_x_max) / 2 164 loc_y = (loc_y_min + loc_y_max) / 2 165 self.click_canvas_point(el, loc_x, loc_y) 166 return (loc_x, loc_y) 167 168 def node_in_kuang(self, path, text): 169 # path:Storage address of screenshot text:The text content to look up 170 self.driver.get_screenshot_as_file(path) 171 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 172 result = reader.readtext(path) 173 flag = False 174 for i in result: 175 if i[1].lower() == text: 176 flag = True 177 break 178 return flag 179 180 def kuang_contain_text(self, path, text): 181 # path:Storage address of screenshot text:The text content to look up 182 self.driver.get_screenshot_as_file(path) 183 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 184 result = reader.readtext(path) 185 flag = False 186 for i in result: 187 if text in i[1]: 188 flag = True 189 break 190 return flag 191 192 def text_count(self, path, text): 193 # path:Storage address of screenshot text:The text content to look up 194 self.driver.get_screenshot_as_file(path) 195 size = self.driver.get_window_size() 196 size.get('width') 197 Image.open(path).crop( 198 (0.1 * size.get('width'), 0, 0.6 * size.get('width'), 199 0.4 * size.get('height'))).save(path) 200 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 201 result = reader.readtext(path) 202 count = 0 203 for i in result: 204 if text in i[1]: 205 count = count + 1 206 return count 207