Best Python code snippet using pyatom_python
fachstatistik.py
Source:fachstatistik.py
1# coding: latin-12import string3from ebkus.config import config4from ebkus.app import ebapi5from ebkus.app import Request6from ebkus.app.ebapi import Akte, Fall, Fachstatistik, FachstatistikList, \7 LeistungList,cc,today,calc_age, bcode, EE8from ebkus.html.strkat import get_strasse9import ebkus.html.htmlgen as h10from ebkus.html.akte_share import akte_share11from ebkus.html.fskonfig import fs_customize12class _fachstatistik(Request.Request, akte_share):13 # fs und options wird von customize_item gebraucht14 def _customize(self, fs, rows):15 """Überträgt die in fskonfig definierten Anpassungen der Fachstatistik16 auf den Aufbau des Formulars. Die eigentliche Arbeit findet in17 _customize_item statt.18 Das aus fskonfig importierte fs_customize-Objekt enthält die für die19 Anpassung nötigen Informationen.20 """21 self._fs = fs22 res = []23 for r in rows:24 rc = self._customize_fieldset(r)25 if rc:26 res.append(rc)27 return tuple(res)28 def _customize_fieldset(self, f):29 res = []30 self._legend = None # _customize item kann hier was reinschreiben31 for zeile in f.daten:32 z = self._customize_zeile(zeile)33 if z:34 res.append(z)35 if res:36 f.daten = res37 if self._legend:38 f.legend = self._legend39 return f40 return None # es kann sein, dass ein fieldset wegfällt, wenn es keine gültigen Zeilen hat41 def _customize_zeile(self, zeile):42 res = []43 valid_item = False # mindestens 1 gültiges item pro Zeile, sonst verschwindet Zeile44 for item in zeile:45 i = self._customize_item(item)46 #print 'CUSTOMIZE ITEM: ', item.name, i47 if i and not isinstance(i, h.DummyItem):48 valid_item = True49 res.append(i)50 else:51 res.append(h.DummyItem())52 if valid_item:53 return res54 return None55 def _customize_item(self, item):56 if fs_customize.deaktiviert(item.name):57 return None58 if fs_customize.jokerfeld(item.name):59 feld = fs_customize.fd[item.name]60 kat_code = feld['kat_code']61 if kat_code:62 multiple = feld['verwtyp'] == cc('verwtyp', 'm')63 if fs_customize.jokerfeld_eigenstaendig(item.name):64 self._legend = feld['name']65 item.label = ''66 else:67 item.label = feld['name']68 if multiple:69 item.multiple = True70 item.size = 871 if self._fs: # fachstat Objekt vorhanden, wir sind in updfs72 item.options = self.for_kat(kat_code, self._fs[item.name])73 elif multiple: # initialisieren74 item.options = self.for_kat(kat_code, None)75 else:76 item.options = self.for_kat(kat_code, ' ')77## try:78## item.label = '>>' + item.label79## except:80## pass81 return item82 def _process(self,83 title,84 file,85 fs,86 ):87 falldaten = h.FieldsetInputTable(88 legend='Falldaten',89 daten = [[h.TextItem(label='Fallnummer',90 name='xxx',91 value=fs['fall_fn'],92 readonly=True,93 ),94 h.TextItem(label='Mitarbeiter',95 name='xxx',96 value=fs['mit__ben'],97 readonly=True,98 ),99 h.TextItem(label='Jahr',100 name='jahr',101 value=fs['jahr'],102 class_='textboxmid',103 maxlength=4,104 ),105 ]],106 )107 regional_info = "Ort: %s" % fs['ort']108 for f in config.STRASSENSUCHE.split():109 if f != 'ort':110 regional_info += " %s: %s" % (f.capitalize(), fs[f])111 angabenklient = h.FieldsetInputTable(112 legend="Angaben zum Klienten und dessen Angehörige",113 daten = [[h.TextItem(label='Planungsraum',114 name='xxx',115 value=fs['plraum'],116 readonly=True,117 ),118 h.TextItem(label='PLZ',119 name='xxx',120 value=fs['plz'],121 readonly=True,122 tip=regional_info,123 ),124 ],125 [h.SelectItem(label='Geschlecht',126 name='gs',127 options=self.for_kat('gs', fs['gs']),128 aktiviert=True,129 ),130 h.SelectItem(label='Alter Kind/Jugendliche(r)',131 name='ag',132 options=self.for_kat('fsag', fs['ag']),133 aktiviert=True,134 ),135 ],136 [h.SelectItem(label='Lebensmittelpunkt Kind/Jugendliche(r)',137 name='fs',138 options=self.for_kat('fsfs', fs['fs']),139 ),140 h.SelectItem(label='Empfohlen von',141 name='zm',142 options=self.for_kat('fszm', fs['zm']),143 ),144 ],145 [h.SelectItem(label='Qualifikation Kind/Jugendliche(r)',146 name='qualij',147 options=self.for_kat('fsqualij', fs['qualij']),148 ),149 h.DummyItem(),150 ],151 [h.SelectItem(label='Qualifikation Mutter',152 name='qualikm',153 options=self.for_kat('fsquali', fs['qualikm']),154 ),155 h.SelectItem(label='Qualifikation Vater',156 name='qualikv',157 options=self.for_kat('fsquali', fs['qualikv']),158 ),159 ],160 [h.SelectItem(label='Beschäftigungsverhältnis Mutter',161 name='bkm',162 options=self.for_kat('fsbe', fs['bkm']),163 ),164 h.SelectItem(label='Beschäftigungsverhältnis Vater',165 name='bkv',166 options=self.for_kat('fsbe', fs['bkv']),167 ),168 ],169 [h.SelectItem(label='Herkunftsland Mutter',170 name='hkm',171 options=self.for_kat('fshe', fs['hkm']),172 ),173 h.SelectItem(label='Herkunftsland Vater',174 name='hkv',175 options=self.for_kat('fshe', fs['hkv']),176 ),177 ],178 [h.SelectItem(label='Alter Mutter',179 name='agkm',180 options=self.for_kat('fsagel', fs['agkm']),181 ),182 h.SelectItem(label='Alter Vater',183 name='agkv',184 options=self.for_kat('fsagel', fs['agkv']),185 ),186 ],187 [h.SelectItem(label='Joker 1',188 name='joka1',189 options=self.for_kat('fsjoka1', fs['joka1']),190 ),191 h.SelectItem(label='Joker 2',192 name='joka2',193 options=self.for_kat('fsjoka2', fs['joka2']),194 ),195 ],196 [h.SelectItem(label='Joker 3',197 name='joka3',198 options=self.for_kat('fsjoka3', fs['joka3']),199 ),200 h.SelectItem(label='Joker 4',201 name='joka4',202 options=self.for_kat('fsjoka4', fs['joka4']),203 ),204 ],205 ]206 )207 label_width = "20%" # richtet die Select-Elemente Fieldset-übergreifend aus208 ba1 = h.FieldsetInputTable(209 legend='Problem 1 bei der Anmeldung',210 daten=[[h.SelectItem(label='',211 name='ba1',212 class_='listbox310',213 label_width=label_width,214 options=self.for_kat('fsba', fs['ba1']),215 )216 ]],217 )218 ba2 = h.FieldsetInputTable(219 legend='Problem 2 bei der Anmeldung',220 daten=[[h.SelectItem(label='',221 name='ba2',222 class_='listbox310',223 label_width=label_width,224 options=self.for_kat('fsba', fs['ba2']),225 )226 ]],227 )228 pbk = h.FieldsetInputTable(229 legend='Hauptproblematik Kind/Jugendliche(r)',230 daten=[[h.SelectItem(label='',231 name='pbk',232 class_='listbox310',233 label_width=label_width,234 options=self.for_kat('fspbk', fs['pbk']),235 )236 ]],237 )238## jokf1 = h.FieldsetInputTable(239## legend='Hauptproblematik Kind / Jugendliche',240## daten=[[h.SelectItem(label='',241## name='jokf1',242## class_='listbox310',243## label_width=label_width,244## options=self.for_kat('fspbk', fs['pbk']),245## )246## ]],247## )248 pbe = h.FieldsetInputTable(249 legend='Hauptproblematik der Eltern',250 daten=[[h.SelectItem(label='',251 name='pbe',252 class_='listbox310',253 label_width=label_width,254 options=self.for_kat('fspbe', fs['pbe']),255 )256 ]],257 )258 anmprobleme = h.FieldsetInputTable(259 legend='Problem(e) bei der Anmeldung',260 daten=[[h.SelectItem(label='',261 name='anmprobleme',262 options=self.for_kat('fsba', fs['anmprobleme']),263 multiple=True,264 class_='listbox310',265 label_width=label_width,266 size=8,267 ),268 ]],269 )270 kindprobleme = h.FieldsetInputTable(271 legend='Problemspektrum Kind/Jugendliche(r)',272 daten=[[h.SelectItem(label='',273 name='kindprobleme',274 options=self.for_kat('fspbk', fs['kindprobleme']),275 multiple=True,276 class_='listbox310',277 label_width=label_width,278 size=8,279 ),280 ],281 [h.TextItem(label='Sonstige',282 name='no2',283 value=fs['no2'],284 class_="textbox310",285 ),286 ]],287 )288 elternprobleme = h.FieldsetInputTable(289 legend='Problemspektrum Eltern',290 daten=[[h.SelectItem(label='',291 name='elternprobleme',292 options=self.for_kat('fspbe', fs['elternprobleme']),293 multiple=True,294 class_='listbox310',295 label_width=label_width,296 size=8,297 ),298 ],299 [h.TextItem(label='Sonstige',300 name='no3',301 value=fs['no3'],302 class_="textbox310",303 ),304 ]],305 )306 jokf5 = h.FieldsetInputTable(307 legend='Joker 5',308 daten=[[h.SelectItem(label='',309 name='jokf5',310 class_='listbox310',311 label_width=label_width,312 options=self.for_kat('fsjokf5', fs['jokf5']),313 )314 ]],315 )316 jokf6 = h.FieldsetInputTable(317 legend='Joker 6',318 daten=[[h.SelectItem(label='',319 name='jokf6',320 class_='listbox310',321 label_width=label_width,322 options=self.for_kat('fsjokf6', fs['jokf6']),323 )324 ]],325 )326 jokf7 = h.FieldsetInputTable(327 legend='Joker 7',328 daten=[[h.SelectItem(label='',329 name='jokf7',330 class_='listbox310',331 label_width=label_width,332 options=self.for_kat('fsjokf7', fs['jokf7']),333 )334 ]],335 )336 jokf8 = h.FieldsetInputTable(337 legend='Joker 8',338 daten=[[h.SelectItem(label='',339 name='jokf8',340 class_='listbox310',341 label_width=label_width,342 options=self.for_kat('fsjokf8', fs['jokf8']),343 )344 ]],345 )346 eleistungen = h.FieldsetInputTable(347 legend='Erbrachte Leistungen',348 daten=[[h.SelectItem(label='',349 name='eleistungen',350 class_='listbox310',351 label_width=label_width,352 multiple=True,353 options=self.for_kat('fsle', fs['eleistungen']),354 size=8,355 ),356 ]],357 )358 #### anfang get_termine_daten359 def get_termine_daten():360 label = ('KiMu', 'KiVa', 'Kind', 'Paar', 'Familie',361 'Soz.', 'Lehrer', 'Erz.', 'Hilfebespr.', 'Sonst.', 'Summe')362 namen = ('kkm', 'kkv', 'kki', 'kpa', 'kfa',363 'ksoz', 'kleh', 'kerz', 'kkonf', 'kson', 'kat')364 items = [h.TextItem(label=lab,365 name=name,366 value=fs[name],367 class_='textboxmid',368 onBlur="set_term_sum_fachstat('%s')" % name,369 )370 for lab, name in zip(label, namen)]371 kat = items[-1]372 kat.bold_label=True373 kat.bold_value=True374 return [items[0:5]+[h.DummyItem()], items[5:10]+[kat]]375 ### ende get_termine_daten376 termine = h.FieldsetInputTable(377 legend='Terminsumme',378 daten=get_termine_daten(),379 )380 notiz = h.FieldsetInputTable(381 legend='Notiz',382 daten=[[h.TextItem(label='Notiz',383 name='no',384 value=fs['no'],385 class_='textboxverylarge',386 ),387 ]],388 )389 if file == 'updfs':390 fstat = fs391 else:392 fstat = None393 rows = self._customize(fstat, (394 falldaten,395 angabenklient,396 ba1, ba2,397 pbk, pbe,398 anmprobleme,399 kindprobleme,400 elternprobleme,401 jokf5, jokf6, jokf7, jokf8, 402 eleistungen,403 termine,404 notiz,405 ))406 res = h.FormPage(407 title=title,408 help=False,409 name="fachstatform",action="klkarte",method="post",410 breadcrumbs = (('Hauptmenü', 'menu'),411 ('Klientenkarte', 'klkarte?akid=%(fall__akte_id)s' % fs),412 ),413 rows=rows + (h.SpeichernZuruecksetzenAbbrechen(),),414 hidden=(('file', file),415 ('stz', fs['stz']),416 ('fallid', fs['fall_id']),417 ('fall_fn', fs['fall_fn']),418 ('mitid', fs['mit_id']),419 ('fsid', fs['id']),420 ),421 )422 return res.display()423class fsneu(_fachstatistik):424 """Neue Fachstatistik eintragen. (Tabelle: Fachstatistik)"""425 permissions = Request.STAT_PERM426 def processForm(self, REQUEST, RESPONSE):427 fallid = self.form.get('fallid')428 if not fallid:429 raise EE('Erstellen einer Fachstatistik nur für einen Fall moeglich.')430 fall = Fall(fallid)431 akte = fall['akte']432 # Ich kanns mir nicht anders vorstellen:433 if akte['aktueller_fall']:434 assert fall['id'] == akte['aktueller_fall']['id'] == akte['letzter_fall']['id']435 # das geht nicht immer weil Gleichheit nicht richtig definiert ist436 #assert fall == akte['letzter_fall'] == akte['aktueller_fall']437 leistungen = fall['leistungen']438 jahresl = ebapi.FachstatistikList(where = "fall_fn = '%s'" % fall['fn'])439 if jahresl:440 raise EE('Fachstatistik für den Fall schon vorhanden')441 fs = Fachstatistik()442 def altersgruppe(geburtsdatum_als_string, aktuelles_datum):443 alter = calc_age(geburtsdatum_als_string, aktuelles_datum)444 ag = cc('fsag','999')445 try:446 ag = bcode('fsag', alter)['id']447 except:448 pass # kein bereich gefunden449 return ag450 def altersgruppeeltern(verwcode):451 ag = cc('fsagel','999')452 try:453 for b in akte['bezugspersonen']:454 if b['verw__code'] == verwcode:455 if b['gb']:456 alter = calc_age(b['gb'], fall.getDate('bg'))457 ag = bcode('fsagel', alter)['id']458 except:459 pass # kein valides Geburtsdatum gefunden460 return ag461 462 if config.STRASSENKATALOG:463 strasse = get_strasse(akte)464 else:465 strasse = {}466 fs.init(467 id=Fachstatistik().getNewId(),468 mit_id=self.mitarbeiter['id'],469 fall_id=fall['id'],470 fall_fn=fall['fn'],471 jahr=str(today().year),472 stz=akte['stzbg'],473 plraum=akte['plraum'],474 ort=akte['ort'],475 plz=akte['plz'],476 ortsteil=strasse.get('ortsteil', ''),477 bezirk=strasse.get('bezirk', ''),478 samtgemeinde=strasse.get('samtgemeinde', ''),479 gs=akte['gs'],480 ag=altersgruppe(akte['gb'], fall.getDate('bg')),481 agkm=altersgruppeeltern('1'), # code klerv für Mutter482 agkv=altersgruppeeltern('2'), # code klerv für Vater483 fs=akte['fs'],484 anmprobleme=None,485 kindprobleme=None,486 elternprobleme=None,487 )488 fs['eleistungen'] = ' '.join([str(leist['le']) for leist in leistungen])489 single_kat_felder = ('zm', 'qualij', 'hkm', 'hkv', 'bkm', 'bkv',490 'qualikm', 'qualikv',491 'ba1', 'ba2', 'pbe', 'pbk', )492 for f in single_kat_felder:493 fs[f] = ' ' # leere, selektierte Option, es muss aktiv ausgewählt werden494 anm = fall['anmeldung']495 if anm:496 fs['zm'] = anm[0]['zm']497 joker_felder = ('joka1', 'joka2', 'joka3', 'joka4',498 'jokf5', 'jokf6', 'jokf7', 'jokf8',)499 for f in joker_felder:500 if fs_customize.multifeld(f):501 fs[f] = None502 else:503 fs[f] = ' ' # leere, selektierte Option, es muss aktiv ausgewählt werden504 termin_felder = ('kkm', 'kkv', 'kki', 'kpa', 'kfa',505 'ksoz', 'kleh', 'kerz', 'kkonf', 'kson', 'kat',)506 for f in termin_felder:507 fs[f] = 0508 #print '***********FSNEU', fs509 return self._process(title='Neue Fachstatistik erstellen',510 file='fseinf',511 fs=fs,512 )513# kann auch als updfsform angesprochen werden (siehe EBKuS.py)514# wird in menu_templates.py verwendet515class updfs(_fachstatistik):516 permissions = Request.STAT_PERM517 def processForm(self, REQUEST, RESPONSE):518 fsid = self.form.get('fsid')519 fallid = self.form.get('fallid')520 if fsid:521 fs = Fachstatistik(fsid)522 elif fallid:523 fall = Fall(fallid)524 fs_list = fall['fachstatistiken']525 if not fs_list:526 raise EE('Noch keine Fachstatistik für den Fall vorhanden.')527 else:528 fs = fs_list[-1] # müsste eigentlich immer nur eine sein ...529 else:530 self.last_error_message = "Keine ID für die Fachstatistik erhalten"531 return self.EBKuSError(REQUEST, RESPONSE)532 return self._process(title='Fachstatistik ändern',533 file='updfs',534 fs=fs,535 )536 537 538 539 540 541 542 543 544 545 ...
roifunctionPage.py
Source:roifunctionPage.py
1"""2@Project: WebTps_PoKeyword 3@Description: To local and control roi function page's elements4@Time:2021/7/9 9:46 5@Author:zexin 6 7"""8from time import sleep9import allure10from selenium import webdriver11from selenium.webdriver.common.by import By12#13# from main.page.counterPage import CounterPage14# from main.page.loginPage import LoginPage15# from main.page.patientPage import PatientPage16# from main.page.roitemplatePage import RoiTemplatePage17from utils.BasePage import BasePage18from utils.ReadYaml import ReadYaml19from utils.Selector import structure_selector20class RoiFunctionPage(BasePage):21 element_config = ReadYaml("main\\page_data\\roifunctionPage.yaml")22 add_function_button = element_config['add_function_button']23 output_type_button = element_config['output_type_button']24 selectbox_button = element_config['selectbox_button']25 selectitem_button = element_config['selectitem_button']26 # input_box_button = element_config['']27 margin_input_box = element_config['margin_input_box']28 create_ring_checkbox = element_config['create_ring_checkbox']29 ring_size_inputbox = element_config['ring_size_inputbox']30 submit_button = element_config['submit_button']31 close_modal_button = element_config['close_modal_button']32 @allure.step("update roi by function: Expand")33 def update_roi_by_expand(self, yuan_roi_name, res_roi_name, expand_size):34 self.click("add_function_button", self.add_function_button, num=5, flag=0)35 self.sleep(2)36 self.click("roi_select_box", self.selectbox_button, num=4, flag=0)37 roi_select_item_selector = structure_selector(yuan_roi_name, self.element_config['selectitem_button'][1], self.element_config['selectitem_button'][2])38 yuan_select_item = (self.element_config['selectitem_button'][0], roi_select_item_selector)39 self.click("select_item", yuan_select_item)40 self.clear_and_input("margin_input_box", self.margin_input_box, expand_size)41 self.sleep(3)42 self.click("submit_button", self.submit_button, num=3, flag=0)43 self.sleep(2)44 self.click("close_button", self.close_modal_button, num=1, flag=0)45 self.sleep(2)46 self.click("output_type_button", self.output_type_button, num=0, flag=0)47 self.click("roi_list_select_box", self.selectbox_button, num=0, flag=0)48 roilist_select_item_selector = structure_selector(res_roi_name, self.element_config['selectitem_button'][1],49 self.element_config['selectitem_button'][2])50 res_select_item = (self.element_config['selectitem_button'][0], roilist_select_item_selector)51 self.click("res_select_item", res_select_item)52 self.sleep(1)53 self.click("submit_button", self.submit_button, num=1, flag=0)54 self.sleep(20)55 @allure.step("update roi by function: Expand and Create ring")56 def expand_create_ring(self, yuan_roi_name, res_roi_name, expand_size, ring_size):57 self.click("add_function_button", self.add_function_button, num=5, flag=0)58 self.sleep(2)59 self.click("roi_select_box", self.selectbox_button, num=4, flag=0)60 roi_select_item_selector = structure_selector(yuan_roi_name, self.element_config['selectitem_button'][1],61 self.element_config['selectitem_button'][2])62 yuan_select_item = (self.element_config['selectitem_button'][0], roi_select_item_selector)63 self.click("select_item", yuan_select_item)64 self.clear_and_input("margin_input_box", self.margin_input_box, expand_size)65 self.sleep(3)66 self.click("create_ring_checkbox", self.create_ring_checkbox, flag=0)67 self.clear_and_input("ring_size_inputbox", self.ring_size_inputbox, ring_size, flag=0)68 self.click("submit_button", self.submit_button, num=3, flag=0)69 self.sleep(2)70 self.click("close_button", self.close_modal_button, num=1, flag=0)71 self.sleep(2)72 self.click("output_type_button", self.output_type_button, num=0, flag=0)73 self.click("roi_list_select_box", self.selectbox_button, num=0, flag=0)74 roilist_select_item_selector = structure_selector(res_roi_name, self.element_config['selectitem_button'][1],75 self.element_config['selectitem_button'][2])76 res_select_item = (self.element_config['selectitem_button'][0], roilist_select_item_selector)77 self.click("res_select_item", res_select_item)78 self.sleep(1)79 self.click("submit_button", self.submit_button, num=1, flag=0)80 self.sleep(20)81 def combine_subtract(self, goal1_name, goal2_name, res_roi_name):82 # æ¥éï¼ç®æ äºring1æ¾ä¸å°83 self.click("add_function_button", self.add_function_button, num=5, flag=0)84 self.sleep(2)85 self.click("function_type_selectbox", self.selectbox_button, num=3, flag=0)86 self.sleep(1)87 function_type_item = (By.XPATH, '//div[text()="Combine"]')88 self.click("function_type_item", function_type_item)89 self.sleep(1)90 self.click("goal1_selectbox", self.selectbox_button, num=4, flag=0)91 goal1_selectitem = structure_selector(goal1_name, self.element_config['selectitem_button'][1], self.element_config['selectitem_button'][2])92 goal1_selector = (self.element_config['selectitem_button'][0], goal1_selectitem)93 self.click("goal1_selectitem", goal1_selector)94 sleep(2)95 self.click("goal2_selectbox", self.selectbox_button, num=6, flag=0)96 self.sleep(1)97 goal2_selectitem = structure_selector(goal2_name, self.element_config['selectitem_button'][1],98 self.element_config['selectitem_button'][2])99 goal2_selector = (self.element_config['selectitem_button'][0], goal2_selectitem)100 self.click("goal2_selectitem", goal2_selector, flag=0)101 self.click("submit_button", self.submit_button, num=3, flag=0)102 self.sleep(2)103 self.click("close_button", self.close_modal_button, num=1, flag=0)104 self.sleep(2)105 self.click("output_type_button", self.output_type_button, num=0, flag=0)106 self.click("roi_list_select_box", self.selectbox_button, num=0, flag=0)107 roilist_select_item_selector = structure_selector(res_roi_name, self.element_config['selectitem_button'][1],108 self.element_config['selectitem_button'][2])109 res_select_item = (self.element_config['selectitem_button'][0], roilist_select_item_selector)110 self.click("res_select_item", res_select_item)111 self.sleep(1)112 self.click("submit_button", self.submit_button, num=1, flag=0)113 self.sleep(20)114# if __name__ == '__main__':115# driver = webdriver.Chrome(r'D:\chromedriver\chromedriver_win32\chromedriver.exe')116# username = 'xzx'117# password = '111111'118# patient_name = "autotest_debug"119# login_page = LoginPage(driver)120# login_page.login(username, password)121# sleep(5)122# patient_page = PatientPage(driver)123# patient_page.open_patient(patient_name)124# sleep(10)125# counter_page = CounterPage(driver)126# # counter_page.enter_add_roi_by_template()127# # roi_template_page = RoiTemplatePage(driver)128# # roi_template_page.add_roi_by_template('Rectun_xzx')129# # sleep(30)130# counter_page.enter_roi_function()131# sleep(2)132# roi_function_page = RoiFunctionPage(driver)133# #roi_function_page.expand_create_ring('PTV_Rectum', 'ring1', '1.5', '1')...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!