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 asyncio import subprocess 11import os 12import time 13import warnings 14 15import easyocr 16import pytest 17from PIL import Image 18from selenium import webdriver 19from selenium.webdriver import ActionChains 20 21from public_moudle.base import Base 22 23warnings.filterwarnings("ignore", category=UserWarning) 24 25 26class TestHcsTool: 27 driver = webdriver.Chrome() 28 test = Base(driver) 29 url = test.getfiledir() 30 31 @staticmethod 32 def setup_class(): 33 # Determine whether the index.html file in the local project 34 # can be opened and used before executing the use case 35 filelist = os.listdir('../../dist') 36 if len(filelist) < 2: 37 os.chdir('../../') 38 subprocess.run(["python", "build.py"]) 39 else: 40 return 41 42 def setup(self): 43 # Open a web page in your browser 44 self.driver.get(self.url) 45 time.sleep(1) 46 47 def teardown(self): 48 # Data cleaning 49 print('Clear cookies and exit the login state') 50 self.driver.delete_all_cookies() 51 self.driver.refresh() 52 time.sleep(1) 53 54 def teardown_class(self): 55 # When the use case is complete, close the browser 56 self.driver.quit() 57 58 def test_rootselfattr(self): 59 el = self.test.find_element(('id', 'visual_area')) 60 loc = self.test.get_canvas_point_position( 61 './Program_pictures/rootselfattr.png', 'root') 62 self.test.click_canvas_point(el, loc[0], loc[1]) 63 time.sleep(2) 64 rootname = self.driver.find_element_by_class_name('att_title').text 65 assert rootname == 'root' 66 nodetype = self.driver.find_element_by_xpath( 67 '/html/body/div/select/option[1]').text 68 assert nodetype == '数据类不继承' # The node type is data class and does not inherit 69 result = self.test.get_attribute(('id', 'node_type'), 'disabled') 70 assert result == 'true' # The node type cannot be modified 71 nodename = self.test.get_attribute(('id', 'name'), 'value') 72 assert nodename == 'root' # The node name is root 73 nameedit = self.test.get_attribute(('id', 'name'), 'disabled') 74 assert nameedit == 'true' # The node name cannot be modified 75 self.driver.refresh() 76 time.sleep(1) 77 self.test.add_node('root') # add node 78 time.sleep(0.5) 79 self.driver.refresh() # Refresh the page 80 time.sleep(1) 81 self.test.add_attr('root') # add attr 82 time.sleep(0.5) 83 self.driver.refresh() 84 time.sleep(1) 85 self.test.click_canvas_by_text('root') # click root 86 self.test.click(('id', 'delete')) # click delete button 87 path = './Program_pictures/rootselfattr1.png' 88 self.driver.get_screenshot_as_file(path) 89 Image.open(path).crop((0.8 * 929, 0, 929, 0.3 * 888)).save(path) 90 reader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 91 nodecount = reader.readtext(path) 92 assert len( 93 nodecount 94 ) == 1 # Gets the number of elements in the property edit area 95 96 def test_addnodedata(self): 97 time.sleep(0.5) 98 self.test.add_node('root') 99 time.sleep(1) 100 topname = self.driver.find_element_by_class_name('att_title').text 101 assert topname == 'node_1' 102 nodetype = self.driver.find_element_by_xpath( 103 '/html/body/div/select/option[1]').text 104 assert nodetype == '数据类不继承' 105 self.test.sendkeys(('id', 'name'), 'nodeceshi') 106 time.sleep(0.5) 107 flag = self.test.node_in_kuang('./Program_pictures/addnodedata1.png', 108 'nodeceshi') 109 assert flag is True 110 self.test.click(('id', 'add_child_node')) # add node 111 time.sleep(0.5) 112 self.test.click(('id', 'add_child_attr')) # add attr 113 time.sleep(0.5) 114 self.test.click_canvas_by_text('nodeceshi') # delete node_1(nodeceshi) 115 self.test.click(('id', 'delete')) 116 deletnode = self.test.node_in_kuang( 117 './Program_pictures/addnodedata2.png', 'nodeceshi') 118 assert deletnode is False 119 120 def test_datamodifycopy(self): 121 self.test.add_node('root') # add & click node 122 time.sleep(0.5) 123 self.driver.find_element_by_xpath( 124 '/html/body/div/select/option[2]').click() # change node type copy 125 time.sleep(0.5) 126 result = self.test.get_attribute( 127 ('id', 'node_type'), 'disabled') # node type cannot modified 128 assert result == 'true' 129 copyflag = self.test.kuang_contain_text( 130 './Program_pictures/datamodifycopy1.png', "复制目标没找到") 131 assert copyflag is True 132 self.test.click(('id', 'change_target')) # click copy button 133 time.sleep(0.5) 134 selecttarget = self.test.kuang_contain_text( 135 './Program_pictures/datamodifycopy2.png', "点击选") 136 assert selecttarget is True 137 canceltarget = self.test.kuang_contain_text( 138 './Program_pictures/datamodifycopy3.png', "取消选择") 139 assert canceltarget is True 140 self.test.sendkeys(('id', 'name'), 'hhhh') # modify node name 141 time.sleep(0.5) 142 containhhhh = self.test.kuang_contain_text( 143 './Program_pictures/datamodifycopy4.png', 'hhhh') 144 assert containhhhh is True 145 146 def test_copyself(self): 147 el = self.test.find_element(('id', 'visual_area')) 148 nodeloc = self.test.add_node('root') # add & click node 149 time.sleep(0.5) 150 self.driver.find_element_by_xpath( 151 '/html/body/div/select/option[2]').click() # change node type copy 152 time.sleep(0.5) 153 self.test.click(('id', 'change_target')) # click copy button 154 time.sleep(0.5) 155 loc = self.test.get_obtain_point_position( 156 './Program_pictures/copyself1.png', '点击选') 157 self.test.click_canvas_point(el, 650, 700) 158 time.sleep(0.5) 159 loc1 = self.test.get_obtain_point_position( 160 './Program_pictures/copyself2.png', '点击选') 161 assert loc[0] != loc1[0] and loc[1] != loc1[1] 162 self.test.sendkeys(('id', 'name'), 'hhhh') # modify node name 163 time.sleep(0.5) 164 self.test.click_canvas_point(el, nodeloc[0], nodeloc[1]) # copy self 165 time.sleep(0.5) 166 selecttarget = self.test.kuang_contain_text( 167 './Program_pictures/copyself3.png', "点击选") 168 assert selecttarget is False 169 canceltarget = self.test.kuang_contain_text( 170 './Program_pictures/copyself4.png', "取消选择") 171 assert canceltarget is False 172 copyflag = self.test.kuang_contain_text( 173 './Program_pictures/copyself5.png', "循环复制") 174 assert copyflag is True 175 unknowexit = self.test.node_in_kuang( 176 './Program_pictures/copyself6.png', 'unknow') 177 assert unknowexit is False 178 179 def test_modiycopy(self): 180 el = self.test.find_element(('id', 'visual_area')) 181 nodeloc = self.test.add_node('root') # add & click node 182 time.sleep(0.5) 183 self.driver.find_element_by_xpath( 184 '/html/body/div/select/option[2]').click() # change node type copy 185 self.test.click(('id', 'change_target')) # click copy button 186 self.test.click_canvas_point(el, nodeloc[0], nodeloc[1]) # copy self 187 time.sleep(0.5) 188 self.test.click(('id', 'change_target')) # clck copy button 189 time.sleep(1) 190 self.test.click_canvas_by_text('nodeaa') # copy nodeaa 191 time.sleep(1) 192 text = self.driver.find_element_by_id('change_target').text 193 assert text == 'nodeaa' 194 195 def test_modifycopyname(self): 196 time.sleep(1) 197 nodeloc = self.test.add_node('root') # add & click node 198 time.sleep(0.5) 199 self.driver.find_element_by_xpath( 200 '/html/body/div/select/option[2]').click() # change node type copy 201 self.test.click(('id', 'change_target')) # click copy button 202 self.test.click_canvas_by_text('nodeaa') # copy nodeaa 203 time.sleep(0.5) 204 loc = self.test.get_canvas_point_position( 205 './Program_pictures/modifycopyname1.png', 'nodeaa') 206 el = self.test.find_element(('id', 'visual_area')) 207 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodeaa 208 time.sleep(0.5) 209 self.test.sendkeys(('id', 'name'), 'nodeff') # modify nodeaa name 210 text = self.test.get_attribute(('id', 'name'), 'value') 211 assert text == 'nodeff' 212 time.sleep(0.5) 213 self.test.click_canvas_point(el, nodeloc[0], 214 nodeloc[1]) # click node_1 again 215 self.test.click(('id', 'change_target')) # click copy button 216 time.sleep(0.5) 217 self.test.click_canvas_point(el, loc[0], loc[1]) # copy nodeff again 218 time.sleep(0.5) 219 copyname = self.driver.find_element_by_id('change_target').text 220 assert copyname == 'nodeff' 221 222 def test_copyattr(self): 223 time.sleep(1) 224 self.test.add_node('root') # add & click node 225 time.sleep(0.5) 226 self.driver.find_element_by_xpath( 227 '/html/body/div/select/option[2]').click() # change node type copy 228 self.test.click(('id', 'change_target')) # click copy button 229 self.test.click_canvas_by_text('extstring') # copy extstring 230 time.sleep(0.5) 231 cancelselect = self.test.kuang_contain_text( 232 './Program_pictures/copyattr.png', "取消选择") 233 assert cancelselect is True 234 235 def test_cancelcopy(self): 236 self.test.add_node('root') # add & click node 237 time.sleep(0.5) 238 self.driver.find_element_by_xpath( 239 '/html/body/div/select/option[2]').click() # change node type copy 240 self.test.click(('id', 'change_target')) # click copy button 241 self.test.click_canvas_by_text('取消选择') # click cancel copy button 242 time.sleep(0.5) 243 cancelselect = self.test.kuang_contain_text( 244 './Program_pictures/cancelselect1.png', "取消选择") 245 assert cancelselect is False 246 selecttarget = self.test.kuang_contain_text( 247 './Program_pictures/cancelselect2.png', "点击选") 248 assert selecttarget is False 249 copyflag = self.test.kuang_contain_text( 250 './Program_pictures/cancelselect3.png', "复制目标没找到") 251 assert copyflag is True 252 253 def test_reference(self): 254 self.test.add_node('root') # add & click node 255 time.sleep(0.5) 256 self.driver.find_element_by_xpath( 257 '/html/body/div/select/option[3]').click( 258 ) # change node type reference 259 time.sleep(0.5) 260 result = self.test.get_attribute( 261 ('id', 'node_type'), 'disabled') # node type cannot modified 262 assert result == 'true' 263 referenceflag = self.test.kuang_contain_text( 264 './Program_pictures/reference1.png', "目标没找到") 265 assert referenceflag is True 266 self.test.click(('id', 'change_target')) # click reference button 267 time.sleep(0.5) 268 selecttarget = self.test.kuang_contain_text( 269 './Program_pictures/reference2.png', "点击选") 270 assert selecttarget is True 271 canceltarget = self.test.kuang_contain_text( 272 './Program_pictures/reference3.png', "取消选择") 273 assert canceltarget is True 274 275 def test_referenceself(self): 276 el = self.test.find_element(('id', 'visual_area')) 277 nodeloc = self.test.add_node('root') # add & click node 278 time.sleep(0.5) 279 self.driver.find_element_by_xpath( 280 '/html/body/div/select/option[3]').click( 281 ) # change node type reference 282 time.sleep(0.5) 283 self.test.click(('id', 'change_target')) # click reference button 284 time.sleep(0.5) 285 loc = self.test.get_obtain_point_position( 286 './Program_pictures/referenceself1.png', '点击选择') 287 self.test.click_canvas_point(el, 650, 700) 288 time.sleep(0.5) 289 loc1 = self.test.get_obtain_point_position( 290 './Program_pictures/referenceself2.png', '点击选择') 291 assert loc[0] != loc1[0] and loc[1] != loc1[1] 292 self.test.sendkeys(('id', 'name'), 'hhhh') # modify node name 293 time.sleep(0.5) 294 self.test.click_canvas_point(el, nodeloc[0], 295 nodeloc[1]) # refence self 296 time.sleep(0.5) 297 selecttarget = self.test.kuang_contain_text( 298 './Program_pictures/referenceself3.png', "点击选择") 299 assert selecttarget is False 300 canceltarget = self.test.kuang_contain_text( 301 './Program_pictures/referenceself4.png', "取消选择") 302 assert canceltarget is False 303 copyflag = self.test.kuang_contain_text( 304 './Program_pictures/referenceself5.png', "环引用") 305 assert copyflag is True 306 text = self.driver.find_element_by_id('change_target').text 307 assert text == 'hhhh' 308 309 def test_modifyreference(self): 310 el = self.test.find_element(('id', 'visual_area')) 311 nodeloc = self.test.add_node('root') # add & click node 312 time.sleep(0.5) 313 self.driver.find_element_by_xpath( 314 '/html/body/div/select/option[3]').click( 315 ) # change node type to reference 316 self.test.click(('id', 'change_target')) # click reference button 317 self.test.click_canvas_point(el, nodeloc[0], 318 nodeloc[1]) # refence self 319 time.sleep(0.5) 320 self.test.click(('id', 'change_target')) # click reference button 321 time.sleep(1) 322 self.test.click_canvas_by_text('nodeaa') # reference nodeaa 323 time.sleep(1) 324 text = self.driver.find_element_by_id('change_target').text 325 assert text == 'nodeaa' 326 327 def test_modifyrefename(self): 328 nodeloc = self.test.add_node('root') # add & click node 329 time.sleep(0.5) 330 self.driver.find_element_by_xpath( 331 '/html/body/div/select/option[3]').click( 332 ) # change node type to reference 333 self.test.click(('id', 'change_target')) # click reference button 334 self.test.click_canvas_by_text('nodeaa') # reference nodeaa 335 time.sleep(0.5) 336 loc = self.test.get_canvas_point_position( 337 './Program_pictures/modifyrefename1.png', 'nodeaa') 338 el = self.test.find_element(('id', 'visual_area')) 339 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodeaa 340 time.sleep(0.5) 341 self.test.sendkeys(('id', 'name'), 'nodeff') # modify nodeaa name 342 text = self.test.get_attribute(('id', 'name'), 'value') 343 assert text == 'nodeff' 344 time.sleep(0.5) 345 self.test.click_canvas_point(el, nodeloc[0], 346 nodeloc[1]) # click node_1 347 self.test.click(('id', 'change_target')) # click reference button 348 time.sleep(0.5) 349 self.test.click_canvas_point(el, loc[0], loc[1]) # reference nodeff 350 time.sleep(0.5) 351 refename = self.driver.find_element_by_id('change_target').text 352 assert refename == 'nodeff' 353 354 def test_refeattr(self): 355 print("") 356 self.test.add_node('root') # add & click node 357 time.sleep(0.5) 358 self.driver.find_element_by_xpath( 359 '/html/body/div/select/option[3]').click( 360 ) # change node type reference 361 self.test.click(('id', 'change_target')) # click reference button 362 self.test.click_canvas_by_text('extstring') # reference extstring 363 time.sleep(0.5) 364 cancelselect = self.test.kuang_contain_text( 365 './Program_pictures/refeattr.png', "取消选择") 366 assert cancelselect is True 367 368 def test_cancelrefe(self): 369 self.test.add_node('root') # add & click node 370 time.sleep(0.5) 371 self.driver.find_element_by_xpath( 372 '/html/body/div/select/option[3]').click( 373 ) # change node type reference 374 self.test.click(('id', 'change_target')) # click reference button 375 self.test.click_canvas_by_text('取消选择') # click cancel reference button 376 time.sleep(0.5) 377 cancelselect = self.test.kuang_contain_text( 378 './Program_pictures/cancelrefe1.png', "取消选择") 379 assert cancelselect is False 380 selecttarget = self.test.kuang_contain_text( 381 './Program_pictures/cancelrefe2.png', "点击选") 382 assert selecttarget is False 383 copyflag = self.test.kuang_contain_text( 384 './Program_pictures/cancelrefe3.png', "目标没找到") 385 assert copyflag is True 386 387 def test_delete(self): 388 self.test.add_node('root') # add & click node 389 time.sleep(0.5) 390 self.driver.find_element_by_xpath('/html/body/div/select/option[4]' 391 ).click() # change node type delete 392 time.sleep(0.5) 393 result = self.test.get_attribute( 394 ('id', 'node_type'), 'disabled') # node type cannot modified 395 assert result == 'true' 396 self.test.click(('id', 'delete')) # click delete button 397 time.sleep(0.5) 398 deleteexit = self.test.kuang_contain_text( 399 './Program_pictures/delete.png', "delete") 400 assert deleteexit is False 401 402 def test_templete(self): 403 self.test.add_node('root') # add & click node 404 time.sleep(0.5) 405 self.driver.find_element_by_xpath('/html/body/div/select/option[5]' 406 ).click() # change node type templete 407 time.sleep(0.5) 408 result = self.test.get_attribute( 409 ('id', 'node_type'), 'disabled') # node type cannot modified 410 assert result == 'true' 411 time.sleep(0.5) 412 self.test.click(('id', 'add_child_node')) 413 self.test.click(('id', 'add_child_attr')) 414 415 def test_inheritance(self): 416 self.test.add_node('root') # add & click node 417 time.sleep(0.5) 418 # Change the node type to inheritance class 419 self.driver.find_element_by_xpath( 420 '/html/body/div/select/option[6]').click() 421 time.sleep(0.5) 422 result = self.test.get_attribute( 423 ('id', 'node_type'), 'disabled') # node type cannot modified 424 assert result == 'true' 425 referenceflag = self.test.kuang_contain_text( 426 './Program_pictures/inheritance1.png', "不到继承目标") 427 assert referenceflag is True 428 self.test.click( 429 ('id', 'change_target')) # Click the Inheritance button 430 time.sleep(0.5) 431 selecttarget = self.test.kuang_contain_text( 432 './Program_pictures/inheritance2.png', "点击选") 433 assert selecttarget is True 434 canceltarget = self.test.kuang_contain_text( 435 './Program_pictures/inheritance3.png', "取消选择") 436 assert canceltarget is True 437 438 def test_inherself(self): 439 el = self.test.find_element(('id', 'visual_area')) 440 nodeloc = self.test.add_node('root') # add & click node 441 time.sleep(0.5) 442 # Change the node type to inheritance class 443 self.driver.find_element_by_xpath( 444 '/html/body/div/select/option[6]').click() 445 time.sleep(0.5) 446 self.test.click( 447 ('id', 'change_target')) # Click the Inheritance button 448 time.sleep(0.5) 449 loc = self.test.get_obtain_point_position( 450 './Program_pictures/inherself1.png', '点击选择') 451 self.test.click_canvas_point(el, 650, 700) 452 time.sleep(0.5) 453 loc1 = self.test.get_obtain_point_position( 454 './Program_pictures/inherself2.png', '点击选择') 455 assert loc[0] != loc1[0] and loc[1] != loc1[1] 456 self.test.sendkeys(('id', 'name'), 'hhhh') 457 time.sleep(0.5) 458 self.test.click_canvas_point(el, nodeloc[0], 459 nodeloc[1]) # Inherit self 460 time.sleep(0.5) 461 selecttarget = self.test.kuang_contain_text( 462 './Program_pictures/inherself3.png', "点击选择") 463 assert selecttarget is False 464 canceltarget = self.test.kuang_contain_text( 465 './Program_pictures/inherself4.png', "取消选择") 466 assert canceltarget is False 467 text = self.driver.find_element_by_id('change_target').text 468 assert text == 'hhhh' 469 470 def test_modifyinher(self): 471 el = self.test.find_element(('id', 'visual_area')) 472 nodeloc = self.test.add_node('root') # add & click node 473 time.sleep(0.5) 474 # Change the node type to inheritance class 475 self.driver.find_element_by_xpath( 476 '/html/body/div/select/option[6]').click() 477 self.test.click( 478 ('id', 'change_target')) # Click the Inheritance button 479 self.test.click_canvas_point(el, nodeloc[0], 480 nodeloc[1]) # Inherit self 481 time.sleep(0.5) 482 self.test.click( 483 ('id', 'change_target')) # Click the Inheritance button 484 time.sleep(1) 485 self.test.click_canvas_by_text('nodeaa') # Inherit nodeaa 486 time.sleep(1) 487 text = self.driver.find_element_by_id('change_target').text 488 assert text == 'nodeaa' 489 490 def test_modifyinhername(self): 491 self.test.click_canvas_by_text('nodeaa') 492 time.sleep(0.5) 493 self.driver.find_element_by_xpath( 494 '/html/body/div/select/option[5]').click() 495 time.sleep(1) 496 nodeloc = self.test.add_node('root') # add && click node 497 time.sleep(0.5) 498 # Change the node type to inheritance class 499 self.driver.find_element_by_xpath( 500 '/html/body/div/select/option[6]').click() 501 self.test.click( 502 ('id', 'change_target')) # Click the Inheritance button 503 self.test.click_canvas_by_text( 504 'templete nodeaa') # Inherits an existing attribute nodeaa 505 time.sleep(0.5) 506 loc = self.test.get_canvas_point_position( 507 './Program_pictures/modifyinhername1.png', 'templete nodeaa') 508 el = self.test.find_element(('id', 'visual_area')) 509 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodeaa 510 time.sleep(0.5) 511 self.test.sendkeys(('id', 'name'), 'nodeff') # modify nodeaa name 512 text = self.test.get_attribute(('id', 'name'), 'value') 513 assert text == 'nodeff' # Verify that the node name is successfully changed 514 time.sleep(0.5) 515 refeflag = self.test.kuang_contain_text( 516 './Program_pictures/modifyinhername2.png', "不能继承数据类节点") 517 assert refeflag is True 518 self.test.click_canvas_point(el, nodeloc[0], 519 nodeloc[1]) # Click the node_1 node again 520 self.test.click( 521 ('id', 'change_target')) # Click the Inheritance button 522 time.sleep(0.5) 523 self.test.click_canvas_point(el, loc[0], 524 loc[1]) # Inherit the nodeff node again 525 time.sleep(0.5) 526 refename = self.driver.find_element_by_id('change_target').text 527 assert refename == 'nodeff' 528 529 def test_inheattr(self): 530 self.test.add_node('root') # add && click node 531 time.sleep(0.5) 532 # Change the node type to inheritance class 533 self.driver.find_element_by_xpath( 534 '/html/body/div/select/option[6]').click() 535 self.test.click( 536 ('id', 'change_target')) # Click the Inheritance button 537 self.test.click_canvas_by_text( 538 'extstring') # Inherits an existing attribute node 539 time.sleep(0.5) 540 cancelselect = self.test.kuang_contain_text( 541 './Program_pictures/inheattr.png', "取消选择") 542 assert cancelselect is True # The deselect button still exists on the canvas 543 544 def test_cancelinher(self): 545 self.test.add_node('root') # add && click node 546 time.sleep(0.5) 547 # Change the node type to inheritance class 548 self.driver.find_element_by_xpath( 549 '/html/body/div/select/option[6]').click() 550 self.test.click( 551 ('id', 'change_target')) # Click the Inheritance button 552 self.test.click_canvas_by_text('取消选择') # click cancal select 553 time.sleep(0.5) 554 cancelselect = self.test.kuang_contain_text( 555 './Program_pictures/cancelinher1.png', "取消选择") 556 assert cancelselect is False # The deselect button still exists on the canvas 557 selecttarget = self.test.kuang_contain_text( 558 './Program_pictures/cancelinher2.png', "点击选") 559 assert selecttarget is False # Canvas without prompt click to select target text 560 copyflag = self.test.kuang_contain_text( 561 './Program_pictures/cancelinher3.png', "不到继承目标") 562 assert copyflag is True # Canvas hint could not find inheritance target 563 564 def test_addattr(self): 565 self.test.add_attr('root') # add attr 566 attname = self.driver.find_element_by_class_name('att_title').text 567 assert attname == 'attr_1' 568 self.test.sendkeys(('id', 'name'), 'addattr') # modify attr name 569 flag = self.test.kuang_contain_text('./Program_pictures/addattr1.png', 570 'addattr') 571 assert flag == True # Verify that the property name was successfully modified 572 text = self.driver.find_element_by_xpath( 573 '/html/body/div/select/option[1]').text # get attr type 574 assert text == '整数' 575 attrvalue = self.test.get_attribute(('id', 'value'), 576 'value') # get attr values 577 assert attrvalue == '0' 578 self.test.sendkeys(('id', 'value'), 3) 579 modifyvalue = self.test.get_attribute(('id', 'value'), 580 'value') # modify attr values 581 assert modifyvalue == '3' 582 self.test.click(('id', 'delete')) # delete attr 583 deleteattr = self.test.kuang_contain_text( 584 './Program_pictures/addattr2.png', 'addattr') 585 assert deleteattr == False # Verifying a successful deletion 586 587 def test_modifystring(self): 588 self.test.add_attr('root') 589 time.sleep(0.5) 590 self.driver.find_element_by_xpath( 591 '/html/body/div/select/option[2]').click( 592 ) # change attr type is string 593 time.sleep(0.5) 594 stringtext = self.test.get_attribute(('id', 'value'), 595 'value') # get attr values 596 assert stringtext == '' 597 self.test.sendkeys(('id', 'value'), 598 'hhh***你好5678') # modify attr values 599 stringattr = self.test.kuang_contain_text( 600 './Program_pictures/modifystring.png', '你好5678') 601 assert stringattr == True # Verify modify successfully 602 603 def test_modifyarray(self): 604 self.test.add_attr('root') 605 time.sleep(0.5) 606 self.driver.find_element_by_xpath( 607 '/html/body/div/select/option[3]').click( 608 ) # change attr type is array 609 time.sleep(0.5) 610 stringtext = self.test.get_attribute(('id', 'value'), 611 'value') # get attr values 612 assert stringtext == '' 613 self.test.sendkeys(('id', 'value'), 614 r"'ceshi',1,2,1,,,,,4") # modify attr values 615 arrayattr = self.test.kuang_contain_text( 616 './Program_pictures/modifyarray.png', "9]0,1,2,1,0,0,0,0,4") 617 assert arrayattr == True # Verify modify successfully 618 619 def test_modifybool(self): 620 self.test.add_attr('root') 621 time.sleep(0.5) 622 self.driver.find_element_by_xpath('/html/body/div/select/option[4]' 623 ).click() # change attr type is bool 624 time.sleep(0.5) 625 booltext = self.test.get_attribute(('id', 'value'), 626 'value') # Get property values 627 assert booltext == 'true' 628 self.driver.find_element_by_xpath( 629 '//*[@id="value"]/option[2]').click() # modify attr false 630 boolattr = self.test.kuang_contain_text( 631 './Program_pictures/modifybool.png', "alse") 632 assert boolattr == True # Verify the modification 633 634 def test_modifurefe(self): 635 self.test.add_attr('root') 636 time.sleep(0.5) 637 self.driver.find_element_by_xpath( 638 '/html/body/div/select/option[5]').click( 639 ) # change attr type is reference 640 time.sleep(0.5) 641 refeattr = self.test.kuang_contain_text( 642 './Program_pictures/modifurefe1.png', "目标") 643 assert refeattr == True # Failed to find reference target in validation canvas 644 unknowattr = self.test.kuang_contain_text( 645 './Program_pictures/modifurefe2.png', "Unknow") 646 assert unknowattr == True # The attribute node name in the validation canvas contains unknow 647 self.test.click(('id', 'change_target')) # click reference button 648 time.sleep(0.5) 649 # Verify that the property node name in the canvas was changed successfully 650 selectattr = self.test.kuang_contain_text( 651 './Program_pictures/modifurefe3.png', "点击选") 652 assert selectattr == True 653 # The deselect button appears in the lower right corner of the validation canvas 654 cancelselect = self.test.kuang_contain_text( 655 './Program_pictures/modifurefe4.png', "取消选择") 656 assert cancelselect == True 657 loc = self.test.get_obtain_point_position( 658 './Program_pictures/modifurefe5.png', 'extint') 659 el = self.test.find_element(('id', 'visual_area')) 660 self.test.click_canvas_point(el, loc[0], loc[1]) # click extint 661 # The deselect button appears in the lower right corner of the validation canvas 662 clickattr = self.test.kuang_contain_text( 663 './Program_pictures/modifurefe6.png', "取消选择") 664 assert clickattr == True 665 nodeloc = self.test.get_obtain_point_position( 666 './Program_pictures/modifurefe7.png', 667 'nodeaa') # get nodeaa loction 668 el = self.test.find_element(('id', 'visual_area')) 669 self.test.click_canvas_point(el, nodeloc[0], 670 nodeloc[1]) # click nodeaa 671 time.sleep(2) 672 text = self.driver.find_element_by_id( 673 'change_target').text # get reference button name 674 assert text == 'nodeaa' 675 676 def test_modifydelete(self): 677 self.test.add_attr('root') 678 time.sleep(0.5) 679 self.driver.find_element_by_xpath( 680 '/html/body/div/select/option[6]').click( 681 ) # change attr type is delete 682 time.sleep(0.5) 683 before = self.test.kuang_contain_text( 684 './Program_pictures/modifydelete1.png', "elete") 685 assert before == True 686 self.test.click(('id', 'delete')) # click delete button 687 after = self.test.kuang_contain_text( 688 './Program_pictures/modifydelete2.png', "elete") 689 assert after == False 690 691 def test_draginkuang(self): 692 beforedrag = self.test.get_canvas_point_position( 693 './Program_pictures/draginkuang1.png', 'root') 694 el = self.test.find_element(('id', 'visual_area')) 695 size = self.driver.get_window_size() 696 height = size.get('height') 697 actions = ActionChains(self.driver) 698 actions.click_and_hold(el).perform() 699 tracks = [num * 50 for num in range(6, 19)] 700 for i in tracks: 701 actions.w3c_actions.pointer_action.source.create_pointer_move( 702 50, i, height - i) 703 for i in tracks[::-1]: 704 actions.w3c_actions.pointer_action.source.create_pointer_move( 705 50, i, 600) 706 actions.release(el) 707 time.sleep(3) 708 actions.move_to_element_with_offset(el, 500, 500).click() 709 afterdrag = self.test.get_canvas_point_position( 710 './Program_pictures/draginkuang2.png', 'root') 711 actions.perform() 712 assert beforedrag[0] == afterdrag[0] and beforedrag[1] == afterdrag[1] 713 714 def test_dragoutkuang(self): 715 beforedrag = self.test.get_canvas_point_position( 716 './Program_pictures/dragoutkuang1.png', 'root') 717 el = self.test.find_element(('id', 'visual_area')) 718 actions = ActionChains(self.driver) 719 actions.click_and_hold(el) 720 lst = [(300, 600), (350, 550), (400, 500), (450, 450), (500, 400), 721 (550, 350), (600, 300), (650, 250), (700, 200), (750, 150), 722 (800, 100), (850, 15)] 723 for i in lst: 724 actions.w3c_actions.pointer_action.source.create_pointer_move( 725 50, i[0], i[1]) 726 el1 = self.driver.find_element_by_class_name('att_title') 727 actions.move_to_element(el1).click() 728 loc = self.test.get_canvas_point_position( 729 './Program_pictures/dragoutkuang2.png', 'root') 730 lst1 = [(850, 15), (750, 150), (600, 300), (450, 450), (300, 600), 731 (150, 750)] 732 for i in lst1: 733 actions.w3c_actions.pointer_action.source.create_pointer_move( 734 50, i[0], i[1]) 735 actions.move_to_element_with_offset(el, 700, 600).click() 736 afterdrag = self.test.get_canvas_point_position( 737 './Program_pictures/dragoutkuang3.png', 'root') 738 actions.perform() 739 assert beforedrag[0] == afterdrag[0] and beforedrag[1] == afterdrag[1] 740 741 def test_dragel(self): 742 loc = self.test.get_canvas_point_position( 743 './Program_pictures/dragel.png', 'root') 744 el = self.test.find_element(('id', 'visual_area')) 745 self.test.click_canvas_point(el, loc[0], loc[1]) 746 actions = ActionChains(self.driver) 747 actions.move_to_element_with_offset(el, loc[0], 748 loc[1]).click_and_hold() 749 lst = [(int(loc[0]), int(loc[1])), (100, 100), (300, 300), (400, 400), 750 (500, 500), (600, 600)] 751 for i in lst: 752 actions.w3c_actions.pointer_action.source.create_pointer_move( 753 50, i[0], i[1]) 754 actions.perform() 755 time.sleep(2) 756 757 def test_attrcopyself(self): 758 loc = self.test.get_canvas_point_position( 759 './Program_pictures/attrcopyself1.png', 'extstring') 760 el = self.test.find_element(('id', 'visual_area')) 761 self.test.click_canvas_point(el, loc[0], loc[1]) 762 self.test.canvas_copy() 763 time.sleep(0.5) 764 copyself = self.test.kuang_contain_text( 765 './Program_pictures/attrcopyself2.png', '己复制') 766 assert copyself is True 767 cancelcopy = self.test.kuang_contain_text( 768 './Program_pictures/attrcopyself3.png', '取消复制') 769 assert cancelcopy is True 770 beforecopy = self.test.text_count( 771 './Program_pictures/attrcopyself4.png', 'string') 772 self.test.canvas_paste() 773 time.sleep(2) 774 aftercopy = self.test.text_count( 775 './Program_pictures/attrcopyself5.png', 'string') 776 assert aftercopy == beforecopy + 1 777 self.test.click_canvas_point(el, loc[0], loc[1] + 25) 778 time.sleep(1) 779 self.test.sendkeys(('id', 'name'), 'string') 780 time.sleep(2) 781 aftereditname = self.test.text_count( 782 './Program_pictures/attrcopyself7.png', '重名') 783 assert aftereditname == 0 784 785 def test_copysamelevelnode(self): 786 self.test.click_canvas_by_text('extstring') # click extstring 787 self.test.canvas_copy() # keyboard copy extstring 788 loc = self.test.get_canvas_point_position( 789 './Program_pictures/copysamelevelnode1.png', 790 'nodebb') # get nodebb location 791 el = self.test.find_element(('id', 'visual_area')) # get canvas element 792 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodebb 793 self.test.canvas_paste() # keyboard paste extstring 794 aftercopy = self.test.text_count( 795 './Program_pictures/copysamelevelnode2.png', 'string') 796 assert aftercopy >= 2 797 flag = self.test.kuang_contain_text( 798 './Program_pictures/copysamelevelnode3.png', '重名') 799 assert flag is False 800 801 def test_copysamelevelattr(self): 802 self.test.click_canvas_by_text('extstring') # click extstring 803 self.test.canvas_copy() # keyboard copy extstring 804 loc = self.test.get_obtain_point_position( 805 './Program_pictures/copysamelevelattr1.png', 806 'extint') # get extint location 807 el = self.test.find_element(('id', 'visual_area')) # get canvas element 808 self.test.click_canvas_point(el, loc[0], loc[1]) # click extint 809 self.test.canvas_paste() # keyboard paste extstring 810 aftercopy = self.test.text_count( 811 './Program_pictures/copysamelevelattr2.png', 'string') 812 assert aftercopy == 2 813 814 def test_copynextattr(self): 815 self.test.click_canvas_by_text('extstring') # click extstring 816 self.test.canvas_copy() # keyboard copy extstring 817 loc = self.test.get_obtain_point_position( 818 './Program_pictures/copynextattr1.png', 819 'childatt') # get childatt location 820 el = self.test.find_element(('id', 'visual_area')) # get canvas element 821 self.test.click_canvas_point(el, loc[0], loc[1]) # click childatt 822 self.test.canvas_paste() # keyboard paste extstring 823 aftercopy = self.test.text_count( 824 './Program_pictures/copynextattr2.png', 'string') 825 assert aftercopy >= 2 826 flag = self.test.kuang_contain_text( 827 './Program_pictures/copynextattr3.png', '重名') 828 assert flag is False 829 830 def test_copynextnode(self): 831 self.test.click_canvas_by_text('extstring') # click extstring 832 self.test.canvas_copy() # keyboard copy extstring 833 loc = self.test.get_obtain_point_position( 834 './Program_pictures/copynextnode1.png', 835 'childnode') # get childnode location 836 el = self.test.find_element(('id', 'visual_area')) # get canvas element 837 self.test.click_canvas_point(el, loc[0], loc[1]) # click childnode 838 self.test.canvas_paste() # keyboard paste extstring 839 aftercopy = self.test.text_count( 840 './Program_pictures/copynextnode2.png', 'string') 841 assert aftercopy >= 2 842 flag = self.test.kuang_contain_text( 843 './Program_pictures/copynextnode3.png', '重名') 844 assert flag is False 845 846 def test_attrcopyroot(self): 847 self.test.click_canvas_by_text('extstring') # click extstring 848 self.test.canvas_copy() # keyboard copy extstring 849 loc = self.test.get_obtain_point_position( 850 './Program_pictures/attrcopyroot1.png', 851 'root') # get root location 852 el = self.test.find_element(('id', 'visual_area')) # get canvas element 853 self.test.click_canvas_point(el, loc[0], loc[1]) # click root 854 self.test.canvas_paste() # keyboard paste extstring 855 aftercopy = self.test.text_count( 856 './Program_pictures/attrcopyroot2.png', 'string') 857 assert aftercopy == 2 858 859 def test_attrcancelcopy(self): 860 self.test.click_canvas_by_text( 861 'extstring') # click extstring attr node 862 self.test.canvas_copy() # key copy node 863 loc = self.test.get_obtain_point_position( 864 './Program_pictures/attrcancelcopy1.png', 865 '取消复制') # get cancel copy location 866 el = self.test.find_element(('id', 'visual_area')) # get canvas element 867 self.test.click_canvas_point(el, loc[0], loc[1]) # click cancl copy 868 self.test.canvas_paste() # key paste node 869 aftercopy = self.test.text_count( 870 './Program_pictures/attrcancelcopy2.png', 'string') 871 assert aftercopy == 1 872 flag = self.test.kuang_contain_text( 873 './Program_pictures/attrcancelcopy3.png', '重名') 874 assert flag is False 875 copyself = self.test.kuang_contain_text( 876 './Program_pictures/attrcancelcopy4.png', '己复制') 877 assert copyself is False 878 cancelcopy = self.test.kuang_contain_text( 879 './Program_pictures/attrcancelcopy5.png', '取消复制') 880 assert cancelcopy is False 881 882 def test_nodecopynode(self): 883 self.test.click_canvas_by_text('nodebb') # click nodebb 884 self.test.canvas_copy() # keyboard copy node 885 loc = self.test.get_canvas_point_position( 886 './Program_pictures/nodecopynode1.png', 887 'nodeaa') # get nodeaa location 888 el = self.test.find_element(('id', 'visual_area')) # get canvas element 889 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodeaa 890 self.test.canvas_paste() # keyboar paste node 891 aftercopy = self.test.text_count( 892 './Program_pictures/nodecopynode2.png', 'nodebb') 893 assert aftercopy >= 2 894 flag = self.test.kuang_contain_text( 895 './Program_pictures/nodecopynode3.png', '重名') 896 assert flag is False 897 898 def test_nodecopyattr(self): 899 self.test.click_canvas_by_text('nodebb') # click nodebb 900 self.test.canvas_copy() # keyboard copy node 901 loc = self.test.get_obtain_point_position( 902 './Program_pictures/nodecopyattr1.png', 903 'extstring') # get extstring location 904 el = self.test.find_element(('id', 'visual_area')) # get canvas element 905 self.test.click_canvas_point(el, loc[0], 906 loc[1]) # click extstring attr node 907 self.test.canvas_paste() # keyboard paste node 908 aftercopy = self.test.text_count( 909 './Program_pictures/nodecopyattr2.png', 'nodebb') 910 assert aftercopy == 2 911 912 def test_nodecopynextattr(self): 913 self.test.click_canvas_by_text('nodebb') # click nodebb 914 self.test.canvas_copy() # keyboard copy nodebb 915 loc = self.test.get_obtain_point_position( 916 './Program_pictures/nodecopynextattr1.png', 917 'childatt') # get childatt location 918 el = self.test.find_element(('id', 'visual_area')) # get canvas element 919 self.test.click_canvas_point(el, loc[0], loc[1]) # click childatt 920 self.test.canvas_paste() # keyboard paste nodebb 921 aftercopy = self.test.text_count( 922 './Program_pictures/nodecopynextattr2.png', 'nodebb') 923 assert aftercopy >= 2 924 flag = self.test.kuang_contain_text( 925 './Program_pictures/nodecopynextattr3.png', '重名') 926 assert flag is False 927 928 def test_nodecopynextnode(self): 929 self.test.click_canvas_by_text('nodebb') # click nodebb 930 self.test.canvas_copy() # keyboard copy node 931 loc = self.test.get_obtain_point_position( 932 './Program_pictures/nodecopynextnode1.png', 933 'childnode') # get childnode location 934 el = self.test.find_element(('id', 'visual_area')) # get canvas element 935 self.test.click_canvas_point(el, loc[0], loc[1]) # click childnode 936 self.test.canvas_paste() # keyboard paste nodebb 937 aftercopy = self.test.text_count( 938 './Program_pictures/nodecopynextnode2.png', 'nodebb') 939 assert aftercopy >= 2 940 flag = self.test.kuang_contain_text( 941 './Program_pictures/nodecopynextnode3.png', '重名') 942 assert flag is False 943 944 def test_nodecopyroot(self): 945 self.test.click_canvas_by_text('nodebb') # click nodebb 946 self.test.canvas_copy() # keyboard copy node 947 loc = self.test.get_obtain_point_position( 948 './Program_pictures/nodecopyroot1.png', 'oot') # get root location 949 el = self.test.find_element(('id', 'visual_area')) # get canvas element 950 self.test.click_canvas_point(el, loc[0], loc[1]) # click root 951 self.test.canvas_paste() # keyboard paste nodebb 952 aftercopy = self.test.text_count( 953 './Program_pictures/nodecopyroot2.png', 'nodebb') 954 assert aftercopy >= 2 955 956 def test_nodecopyself(self): 957 loc = self.test.get_canvas_point_position( 958 './Program_pictures/nodecopyself1.png', 959 'nodebb') # get nodebb location 960 el = self.test.find_element(('id', 'visual_area')) # get canvas element 961 self.test.click_canvas_point(el, loc[0], loc[1]) # click nodebb 962 self.test.canvas_copy() # keyboard copy nodebb 963 time.sleep(1) 964 copyself = self.test.text_count('./Program_pictures/nodecopyself2.png', 965 '已复制') 966 assert copyself == 1 967 cancelcopy = self.test.kuang_contain_text( 968 './Program_pictures/nodecopyself3.png', '取消复制') 969 assert cancelcopy is True 970 beforecopy = self.test.text_count( 971 './Program_pictures/nodecopyself4.png', 'nodebb') 972 self.test.canvas_paste() # keyboar paste nodebb 973 time.sleep(2) 974 aftercopy = self.test.text_count( 975 './Program_pictures/nodecopyself5.png', 'nodebb') 976 assert aftercopy == beforecopy + 1 # Verify that nodebb is added to the drawing box 977 repeatname = self.test.text_count( 978 './Program_pictures/nodecopyself6.png', '重名') 979 assert repeatname == 0 980 nodeaaloc = self.test.get_canvas_point_position( 981 './Program_pictures/nodecopyself7.png', 'nodeaa') 982 self.test.click_canvas_point(el, nodeaaloc[0], 983 nodeaaloc[1]) # click nodeaa 984 self.test.canvas_paste() # paste nodebb onto nodeaa 985 aftercopyagain = self.test.text_count( 986 './Program_pictures/nodecopyself8.png', 'nodebb') 987 assert aftercopyagain >= aftercopy + 2 # check paste new nodebb 988