@@ -58,7 +58,7 @@ def __init__(self) -> None:
5858 self .state = State ()
5959 self .driver = None
6060 self .continue_program = True
61- self .pick_delay = 1.5
61+ self .pick_delay = 1
6262 self .elements = ElementClass ()
6363 self .check_if_elements_exist ()
6464
@@ -119,65 +119,72 @@ def pick(self, order):
119119 sleep (1 )
120120 try :
121121 while True :
122- sleep (self .pick_delay )
123- WebDriverWait (self .driver , TIMOUT ).until (
124- EC .element_to_be_clickable (self .elements .FIRSTENTRY )
125- ).click ()
126- sleep (self .pick_delay )
127- WebDriverWait (self .driver , TIMOUT ).until (
128- EC .element_to_be_clickable (self .elements .BINNUMBER )
129- ).click ()
130- sleep (self .pick_delay )
131- WebDriverWait (self .driver , TIMOUT ).until (
132- EC .element_to_be_clickable (self .elements .ITEMNUMBER )
133- ).click ()
134- sleep (self .pick_delay )
122+ self .try_click_element (self .elements .FIRSTENTRY )
123+ self .try_click_element (self .elements .BINNUMBER )
124+ self .try_click_element (self .elements .ITEMNUMBER )
135125
136- amount = self .driver .find_element (
137- self .elements .QUANTITYAMOUNT [0 ], self .elements .QUANTITYAMOUNT [1 ]
138- ).text .split (" " )[0 ]
139- amount += "\n "
140- sleep (1 )
141- WebDriverWait (self .driver , TIMOUT ).until (
142- EC .element_to_be_clickable (self .elements .QUANTITYINPUT )
143- ).send_keys (amount )
126+ amount = self .try_return_text_element (
127+ self .elements .QUANTITYAMOUNT
128+ ).split (" " )[0 ]
144129
145- sleep (self .pick_delay )
130+ self .try_send_keys_element (self .elements .QUANTITYINPUT , amount )
131+ self .try_click_element (self .elements .QUANTITYBUTTON )
146132
147- mark = self .driver . find_element (
148- By .XPATH , "/html/body/div/div/div[1]/div[2]/div[1]"
133+ mark = self .try_return_text_element (
134+ ( By .XPATH , "/html/body/div/div/div[1]/div[2]/div[1]" )
149135 )
150136
151- print (mark .text .lower () + " : " + "Pick Task Complete" .lower ())
152-
153- if mark .text .lower () == "Pick Task Complete" .lower ():
154- WebDriverWait (self .driver , TIMOUT ).until (
155- EC .element_to_be_clickable (self .elements .NEXTPICKTASK )
156- ).click ()
137+ if mark .lower () == "Pick Task Complete" .lower ():
138+ self .try_click_element (self .elements .NEXTPICKTASK )
157139 else :
158140 break
159141
160142 sleep (self .pick_delay )
161143 station = ""
162144 if "sau" in order .lower ():
163- station = "PackStation03\n "
145+ station = "PackStation03"
164146 else :
165- station = "PackStation02\n "
147+ station = "PackStation02"
166148
167- WebDriverWait (self .driver , TIMOUT ).until (
168- EC .element_to_be_clickable (self .elements .STATIONINPUT )
169- ).send_keys (station )
170-
171- sleep (3 )
172-
173- WebDriverWait (self .driver , TIMOUT ).until (
174- EC .element_to_be_clickable (self .elements .NEXTORDERBUTTON )
175- ).click ()
176- sleep (self .pick_delay )
149+ self .try_send_keys_element (self .elements .STATIONINPUT , station )
150+ self .try_click_element (self .elements .STATIONBUTTON )
151+ self .try_click_element (self .elements .NEXTORDERBUTTON )
177152 except exceptions .NoSuchWindowException :
178153 self .driver_closed ()
179154 return
180155
156+ def try_click_element (self , element , T = 10 ):
157+ for i in range (T ):
158+ try :
159+ self .driver .find_element (element [0 ], element [1 ]).click ()
160+ sleep (self .pick_delay )
161+ return
162+ except Exception as e :
163+ sleep (self .pick_delay )
164+ continue
165+ raise exceptions .NoSuchElementException
166+
167+ def try_send_keys_element (self , element , text ):
168+ for i in range (10 ):
169+ try :
170+ self .driver .find_element (element [0 ], element [1 ]).send_keys (text )
171+ sleep (self .pick_delay )
172+ return
173+ except Exception as e :
174+ sleep (self .pick_delay )
175+ continue
176+ raise exceptions .NoSuchElementException
177+
178+ def try_return_text_element (self , element ):
179+ for i in range (10 ):
180+ try :
181+ text = self .driver .find_element (element [0 ], element [1 ]).text
182+ return text
183+ except Exception as e :
184+ sleep (self .pick_delay )
185+ continue
186+ raise exceptions .NoSuchElementException
187+
181188 def scan (
182189 self ,
183190 my_orders : list ,
@@ -303,7 +310,6 @@ def scan(
303310 order_callback (order_list = newlist )
304311
305312 status_flag [0 ] = True
306- print ("Scanning Complete \n Start Again\n " )
307313
308314 def refresh (self , force_refresh_flag = None , status_flag = None , login_callback = None ):
309315 """Re-orients the driver to the start of the mobile emulator website
@@ -474,19 +480,9 @@ def login_microsoft(self, login_flag, username, password, login_failed_callback)
474480 try :
475481 # Will check to see if the username field exists
476482 # It will exist if there is no previous data or data has been wiped
477- try :
478- sleep (2 )
479- self .driver .find_element (
480- self .elements .USERNAMEFIELD [0 ], self .elements .USERNAMEFIELD [1 ]
481- ).send_keys (username )
482- WebDriverWait (self .driver , TIMOUT ).until (
483- EC .element_to_be_clickable (self .elements .NEXTBUTTON )
484- ).click ()
485- sleep (1 )
486- except exceptions .NoSuchElementException :
487- # doesn't exist meaning there is an existing login
488- existing_login = True
489- pass
483+ sleep (2 )
484+ self .try_send_keys_element (self .elements .USERNAMEFIELD , username )
485+ self .try_click_element (self .elements .NEXTBUTTON )
490486
491487 try :
492488 self .driver .find_element (By .ID , "usernameError" )
@@ -505,13 +501,8 @@ def login_microsoft(self, login_flag, username, password, login_failed_callback)
505501 # means that the login passed
506502 pass
507503
508- WebDriverWait (self .driver , TIMOUT ).until (
509- EC .element_to_be_clickable (self .elements .PASSWORDFIELD )
510- ).send_keys (password )
511-
512- WebDriverWait (self .driver , TIMOUT ).until (
513- EC .element_to_be_clickable (self .elements .NEXTBUTTON )
514- ).click ()
504+ self .try_send_keys_element (self .elements .PASSWORDFIELD , password )
505+ self .try_click_element (self .elements .NEXTBUTTON )
515506
516507 try :
517508 self .driver .find_element (By .ID , "passwordError" )
@@ -530,30 +521,10 @@ def login_microsoft(self, login_flag, username, password, login_failed_callback)
530521 # means the password was successfully entered
531522 pass
532523
533- WebDriverWait (self .driver , TIMOUT ).until (
534- EC .element_to_be_clickable (self .elements .NOBUTTON )
535- ).click ()
524+ self .try_click_element (self .elements .NOBUTTON )
536525
537- count = 0
538- while count < TIMOUT :
539- try :
540- WebDriverWait (self .driver , 1 ).until (
541- EC .element_to_be_clickable (self .elements .NETSUITE_ENVIRONMENT )
542- ).click ()
543- break
544- except :
545- pass
546- try :
547- WebDriverWait (self .driver , 1 ).until (
548- EC .element_to_be_clickable (self .elements .NETSUITEHOMEPAGE )
549- ).click ()
550- break
551- except :
552- pass
526+ self .try_click_element (self .elements .NETSUITE_ENVIRONMENT )
553527
554- count += 1
555- # page doesn't exist and I think is linked to new accounts made with netsuite not having
556- # the ability to chose the netsuite environment.
557528 sleep (2 )
558529
559530 self .get_to_orders (login_flag = login_flag )
@@ -589,36 +560,16 @@ def get_to_orders(self, login_flag, refresh_flag=False):
589560 self .driver .get (MOBILE_EMULATOR )
590561
591562 try :
592- sleep (1 )
593- self .driver .find_element (
594- By .XPATH , "/html/body/div/div/div[3]/button"
595- ).click ()
563+ self .try_click_element (self .elements .LASTSESSIONBUTTON , 2 )
596564 except exceptions .NoSuchElementException :
597565 pass
598- sleep (1 )
599- WebDriverWait (self .driver , TIMOUT ).until (
600- EC .element_to_be_clickable (self .elements .WMS )
601- ).click ()
602- sleep (1 )
603- WebDriverWait (self .driver , TIMOUT ).until (
604- EC .element_to_be_clickable (self .elements .WAREHOUSE )
605- ).click ()
606- sleep (1 )
607- WebDriverWait (self .driver , TIMOUT ).until (
608- EC .element_to_be_clickable (self .elements .PICKING )
609- ).click ()
610- sleep (1 )
611- WebDriverWait (self .driver , TIMOUT ).until (
612- EC .element_to_be_clickable (self .elements .SINGLEORDER )
613- ).click ()
614- sleep (1 )
615- WebDriverWait (self .driver , TIMOUT ).until (
616- EC .element_to_be_clickable (self .elements .RELEASEDORDER )
617- ).click ()
618- sleep (1 )
619- WebDriverWait (self .driver , TIMOUT ).until (
620- EC .element_to_be_clickable (self .elements .SALESORDER )
621- ).click ()
566+
567+ self .try_click_element (self .elements .WMS )
568+ self .try_click_element (self .elements .WAREHOUSE )
569+ self .try_click_element (self .elements .PICKING )
570+ self .try_click_element (self .elements .SINGLEORDER )
571+ self .try_click_element (self .elements .RELEASEDORDER )
572+ self .try_click_element (self .elements .SALESORDER )
622573
623574 self .state .change_state (self .identify_page ())
624575 if login_flag is None :
0 commit comments