How to use move_window method in AutoItDriverServer

Best Python code snippet using AutoItDriverServer_python

crop_images.py

Source:crop_images.py Github

copy

Full Screen

1import os2import SimpleITK as sitk3import numpy as np4import get_data as gd5import Preprocessing as p6import useful_functions as uf7def crop_images(dataframe, new_dimension, destination_folders_list, image_filename, mask_filename, tumor_value):8 """9 The function crops the images with path given under 'imagePaths' in the dataframe to the dimension specified by new_dimension.10 The cropped images and masks are saved to the destination paths, given in destination_folders_list.11 :param dataframe: dataframe containing information of image/mask paths and dimensions12 :param new_dimension: wanted image dimensions after cropping13 :param destination_folders_list: list of destination paths to each patient14 :param image_filename: filename of image15 :param mask_filename: filename of mask16 :param tumor_value: value of tumor voxels in mask17 :return: cropped images and masks are saved to destination paths18 """19 for i in range(len(dataframe['imagePaths'])):20 image_original = sitk.ReadImage(dataframe['imagePaths'][i])21 mask_original = sitk.ReadImage(dataframe['maskPaths'][i])22 image_imsize_original = image_original.GetSize()23 if image_imsize_original[1] != 256:24 crop_start = int((image_imsize_original[1] - new_dimension) / 2)25 print(crop_start)26 crop_stop = int(image_imsize_original[1] - crop_start)27 print(crop_stop)28 image_cropped = image_original[crop_start:crop_stop, (crop_start + 10):(crop_stop + 10), :]29 mask_cropped = mask_original[crop_start:crop_stop, (crop_start + 10):(crop_stop + 10), :]30 print('Original imagesize:', dataframe['imagePaths'][i], image_original.GetSize())31 print('Original masksize:', dataframe['maskPaths'][i], mask_original.GetSize())32 print('Cropped imagesize:', image_cropped.GetSize())33 print('Cropped masksize:', mask_cropped.GetSize())34 mask_array_original = sitk.GetArrayFromImage(mask_original)35 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)36 tumor_originally = np.count_nonzero(mask_array_original.flatten() == tumor_value)37 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)38 move_window = 039 while tumor_originally != tumor_cropped:40 print('THE AMOUNT OF TUMOR IS REDUCED AFTER CROPPING! PATH:', dataframe['imagePaths'][i])41 move_window += 542 if image_filename=='T2.nii':43 image_cropped = image_original[(crop_start - move_window):(crop_stop - move_window),44 (crop_start + 10 - move_window):(crop_stop + 10 - move_window), :]45 mask_cropped = mask_original[(crop_start - move_window):(crop_stop - move_window),46 (crop_start + 10 - move_window):(crop_stop + 10 - move_window), :]47 else:48 image_cropped = image_original[(crop_start + move_window):(crop_stop + move_window),49 (crop_start + 10 + move_window):(crop_stop + 10 + move_window), :]50 mask_cropped = mask_original[(crop_start + move_window):(crop_stop + move_window),51 (crop_start + 10 + move_window):(crop_stop + 10 + move_window), :]52 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)53 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)54 print('Tumor before cropping:', tumor_originally)55 print('Tumor after moving cropping window:', tumor_cropped)56 else:57 image_cropped = image_original58 mask_cropped = mask_original59 sitk.WriteImage(image_cropped, os.path.join(destination_folders_list[i], image_filename))60 sitk.WriteImage(mask_cropped, os.path.join(destination_folders_list[i], mask_filename))61def crop_masks(dataframe, new_dimension, destination_folders_list, mask_filename, tumor_value):62 """63 The function crops the masks with path given under 'maskPaths' in the dataframe to the dimension specified by new_dimension.64 The cropped images and masks are saved to the destination paths, given in destination_folders_list.65 :param dataframe: dataframe containing information of image/mask paths and dimensions66 :param new_dimension: wanted image dimensions after cropping67 :param destination_folders_list: list of destination paths to each patient68 :param mask_filename: filename of mask69 :param tumor_value: value of tumor voxels in mask70 :return: cropped masks are saved to destination paths71 """72 for i in range(len(dataframe['maskPaths'])):73 mask_original = sitk.ReadImage(dataframe['maskPaths'][i])74 mask_imsize_original = mask_original.GetSize()75 if mask_imsize_original[1] != 256:76 crop_start = int((mask_imsize_original[1] - new_dimension) / 2)77 print(crop_start)78 crop_stop = int(mask_imsize_original[1] - crop_start)79 print(crop_stop)80 mask_cropped = mask_original[crop_start:crop_stop, (crop_start + 10):(crop_stop + 10), :]81 print('Original masksize:', dataframe['maskPaths'][i], mask_original.GetSize())82 print('Cropped masksize:', mask_cropped.GetSize())83 mask_array_original = sitk.GetArrayFromImage(mask_original)84 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)85 tumor_originally = np.count_nonzero(mask_array_original.flatten() == tumor_value)86 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)87 move_window = 088 while tumor_originally != tumor_cropped:89 print('THE AMOUNT OF TUMOR IS REDUCED AFTER CROPPING! PATH:', dataframe['maskPaths'][i])90 move_window += 591 if mask_filename=='Manual_shh.nii' or mask_filename=='Manual_an.nii':92 mask_cropped = mask_original[(crop_start - move_window):(crop_stop - move_window),93 (crop_start + 10 - move_window):(crop_stop + 10 - move_window), :]94 else:95 mask_cropped = mask_original[(crop_start + move_window):(crop_stop + move_window),96 (crop_start + 10 + move_window):(crop_stop + 10 + move_window), :]97 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)98 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)99 print('Tumor before cropping:', tumor_originally)100 print('Tumor after moving cropping window:', tumor_cropped)101 else:102 mask_cropped = mask_original103 sitk.WriteImage(mask_cropped, os.path.join(destination_folders_list[i], mask_filename))104def remove_nonTumor_slices(dataframe):105 """106 :param dataframe: dataframe with image paths and mask paths107 :return: saves images and masks which only contains tumor for each patient108 """109 #Iterate through each patient110 for i in range(len(dataframe['maskPaths'])):111 #Create image and mask object from file path112 image = sitk.ReadImage(dataframe['imagePaths'][i])113 mask_an = sitk.ReadImage(dataframe['maskPaths'][i])114 path_shh = dataframe['patientPaths'][i] + '/Manual_shh.nii'115 print(path_shh)116 mask_shh = sitk.ReadImage(path_shh)117 print(dataframe['imagePaths'][i])118 print(dataframe['maskPaths'][i])119 #Create image and mask as arrays120 image_array = sitk.GetArrayFromImage(image)121 mask_array_an = sitk.GetArrayFromImage(mask_an)122 mask_array_shh = sitk.GetArrayFromImage(mask_shh)123 slices = image.GetSize()[2] #Number of slices for the given patient124 tumor_slices = []125 #Iterate through all the image slices for a patient126 for j in range(slices):127 #If the slice contains tumor then save the slice index in the tumor_slices list128 if 1 in mask_array_an[j][:][:]:129 if dataframe['ID'][i] == 'LARC-RRP-033' and j == 10: #Do not include this slice (noise from radiologist)130 break131 else:132 tumor_slices.append(j)133 #Get the x- and y-dimensions of the images and masks134 x_dim = int(mask_array_an.shape[1])135 y_dim = int(mask_array_an.shape[2])136 #Create new image and mask arrays with the shape of the original image and mask objects, and with137 #the same number of slices as saved in tumor_slices list138 new_mask_array_an = np.zeros((len(tumor_slices), x_dim, y_dim))139 new_mask_array_shh = np.zeros((len(tumor_slices), x_dim, y_dim))140 new_image_array = np.zeros((len(tumor_slices), x_dim, y_dim))141 #Save the new images and masks as the original images and masks with tumor142 for k in range(len(tumor_slices)):143 new_mask_array_an[k][:][:] = mask_array_an[tumor_slices[k]][:][:]144 new_mask_array_shh[k][:][:] = mask_array_shh[tumor_slices[k]][:][:]145 new_image_array[k][:][:] = image_array[tumor_slices[k]][:][:]146 #Create image and mask from new arrays147 new_mask_an = sitk.GetImageFromArray(new_mask_array_an)148 new_mask_shh = sitk.GetImageFromArray(new_mask_array_shh)149 new_image = sitk.GetImageFromArray(new_image_array)150 #Save the new images and masks (only containing tumor) in the destination paths151 sitk.WriteImage(new_image, dataframe['imagePaths'][i])152 sitk.WriteImage(new_mask_an, dataframe['maskPaths'][i])153 sitk.WriteImage(new_mask_shh, path_shh)154def crop_t2_dwi_mask(dataframe, new_dimension, tumor_value, destination_folders_list, image_filename, mask_filename):155 """156 The function crops the images with path given under 'imagePaths' in the dataframe to the dimension specified by new_dimension.157 The cropped images and masks are saved to the destination paths, given in destination_folders_list.158 :param dataframe: dataframe containing information of image/mask paths and dimensions159 :param new_dimension: wanted image dimensions after cropping160 :param destination_folders_list: list of destination paths to each patient161 :param image_filename: filename of image162 :param mask_filename: filename of mask163 :param tumor_value: value of tumor voxels in mask164 :return: cropped images and masks are saved to destination paths165 """166 for row in range(dataframe.shape[0]):167 print(dataframe['mask'][row])168 mask_original = sitk.ReadImage(dataframe['mask'][row])169 mask_size_original = mask_original.GetSize()170 if mask_size_original[1] != 256:171 crop_start = int((mask_size_original[1] - new_dimension) / 2)172 print(crop_start)173 crop_stop = int(mask_size_original[1] - crop_start)174 print(crop_stop)175 mask_cropped = mask_original[crop_start:crop_stop, (crop_start + 10):(crop_stop + 10), :]176 images = {'b0': [], 'b1': [], 'b2': [], 'b3': [], 'b4': [], 'b5': [], 'b6': [], 't2':[]}177 for column in dataframe.columns[:-1]:178 if os.path.isfile(dataframe[column][row]):179 print(dataframe[column][row])180 image_original = sitk.ReadImage(dataframe[column][row])181 print('Original DWI size:', image_original.GetSize())182 image_cropped = image_original[crop_start:crop_stop, (crop_start + 10):(crop_stop + 10), :]183 images[column] = image_cropped184 print('New DWI size:', images[column].GetSize())185 else:186 print(dataframe[column][row], 'does not exist')187 images[column] = None188 print('Original masksize:', dataframe['mask'][row], mask_original.GetSize())189 print('Cropped masksize:', mask_cropped.GetSize())190 mask_array_original = sitk.GetArrayFromImage(mask_original)191 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)192 tumor_originally = np.count_nonzero(mask_array_original.flatten() == tumor_value)193 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)194 move_window = 0195 while tumor_originally != tumor_cropped:196 print('THE AMOUNT OF TUMOR IS REDUCED AFTER CROPPING! PATH:', dataframe['mask'][row])197 move_window += 5198 if image_filename == 'T2.nii':199 mask_cropped = mask_original[(crop_start - move_window):(crop_stop - move_window),200 (crop_start + 10 - move_window):(crop_stop + 10 - move_window), :]201 for column in dataframe.columns[:-1]:202 if os.path.isfile(dataframe[column][row]):203 print(dataframe[column][row])204 image_original = sitk.ReadImage(dataframe[column][row])205 print('Original DWI size:', image_original.GetSize())206 image_cropped = image_original[(crop_start - move_window):(crop_stop - move_window),207 (crop_start + 10 - move_window):(crop_stop + 10 - move_window), :]208 images[column] = image_cropped209 print('New DWI size:', images[column].GetSize())210 else:211 print(dataframe[column][row], 'does not exist')212 images[column] = None213 else:214 mask_cropped = mask_original[(crop_start + move_window):(crop_stop + move_window),215 (crop_start + 10 + move_window):(crop_stop + 10 + move_window), :]216 for column in dataframe.columns[:-1]:217 if os.path.isfile(dataframe[column][row]):218 print(dataframe[column][row])219 image_original = sitk.ReadImage(dataframe[column][row])220 print('Original DWI size:', image_original.GetSize())221 image_cropped = image_original[(crop_start + move_window):(crop_stop + move_window),222 (crop_start + 10 + move_window):(crop_stop + 10 + move_window), :]223 images[column] = image_cropped224 print('New DWI size:', images[column].GetSize())225 else:226 print(dataframe[column][row], 'does not exist')227 images[column] = None228 mask_array_cropped = sitk.GetArrayFromImage(mask_cropped)229 tumor_cropped = np.count_nonzero(mask_array_cropped.flatten() == tumor_value)230 print('Tumor before cropping:', tumor_originally)231 print('Tumor after moving cropping window:', tumor_cropped)232 sitk.WriteImage(mask_cropped, os.path.join(destination_folders_list[row], mask_filename))233 for key in images:234 if images[key] == None:235 print('None')236 else:237 im_filename = key + '.nii'238 sitk.WriteImage(images[key], os.path.join(destination_folders_list[row], im_filename))239def remove_nonTumor_slices_dwi(dataframe, dst_folders):240 """241 :param dataframe: dataframe with image paths and mask paths242 :return: saves images and masks which only contains tumor for each patient243 """244 #Iterate through each patient245 for i in range(len(dataframe['mask'])):246 #Create mask object from file path247 mask = sitk.ReadImage(dataframe['mask'][i])248 print(dataframe['mask'][i])249 #Create image and mask as arrays250 mask_array = sitk.GetArrayFromImage(mask)251 slices = mask.GetSize()[2] #Number of slices for the given patient252 tumor_slices = []253 #Iterate through all the image slices for a patient254 for j in range(slices):255 #If the slice contains tumor then save the slice index in the tumor_slices list256 if 1 in mask_array[j][:][:]:257 #if dataframe['ID'][i] == 'LARC-RRP-033' and j == 10: #Do not include this slice (noise from radiologist)258 # break259 #else:260 tumor_slices.append(j)261 #Get the x- and y-dimensions of the images and masks262 x_dim = int(mask_array.shape[1])263 y_dim = int(mask_array.shape[2])264 #Create new image and mask arrays with the shape of the original image and mask objects, and with265 #the same number of slices as saved in tumor_slices list266 new_mask_array = np.zeros((len(tumor_slices), x_dim, y_dim))267 new_image_array = np.zeros((len(tumor_slices), x_dim, y_dim))268 for k in range(len(tumor_slices)):269 new_mask_array[k][:][:] = mask_array[tumor_slices[k]][:][:]270 # Create mask from new arrays271 new_mask = sitk.GetImageFromArray(new_mask_array)272 # Save the masks (only containing tumor) in the destination paths273 sitk.WriteImage(new_mask, dataframe['mask'][i])274 for column in dataframe.columns[:-1]:275 print(dataframe[column][i])276 if os.path.isfile(dataframe[column][i]):277 image = sitk.ReadImage(dataframe[column][i])278 print('Original image size:', image.GetSize())279 image_array = sitk.GetArrayFromImage(image)280 for k in range(len(tumor_slices)):281 new_mask_array[k][:][:] = mask_array[tumor_slices[k]][:][:]282 new_image_array[k][:][:] = image_array[tumor_slices[k]][:][:]283 new_image = sitk.GetImageFromArray(new_image_array)284 print('New image size:', new_image.GetSize())285 im_filename = column + '.nii'286 sitk.WriteImage(new_image, os.path.join(dst_folders[i], im_filename))287 else:288 print(dataframe[column][i], 'does not exist')289def remove_rotated_dwi(dataframe, dst_folders):290 """291 The function removes the slices where the DW images does not cover the tumor (due to slightly different orientations292 of DWI and T2).293 :param dataframe: dataframe of paths to all DW images, T2 image and manual delineation (mask) for each patient294 :param dst_folders: list of paths to folders of patients where the new images will be saved295 :return: DW images, T2 image and manual delineation where the slices that the DW images do not cover the entire296 tumor is removed297 """298 #Iterate through each patient299 for row in range(dataframe.shape[0]):300 #Create mask array301 mask = sitk.ReadImage(dataframe['mask'][row])302 mask_array = sitk.GetArrayFromImage(mask)303 #Iterate over all image files for the patient304 for column in dataframe.columns[:-2]:305 print(dataframe[column][row])306 #Check if the image file exists307 if os.path.isfile(dataframe[column][row]):308 #Create image array309 image = sitk.ReadImage(dataframe[column][row])310 image_array = sitk.GetArrayFromImage(image)311 #Go through each image slice and check if the tumor is outside of the DW image.312 #If the tumor is outside of the DW image then the slice is not added to the slices_to_keep list.313 #If the tumor is inside of the DW image then the slice is added to the slices_to_keep list.314 slices_to_keep = []315 keep = 0316 for slice in range(image_array.shape[0]):317 for i in range(image_array.shape[1]):318 for j in range(image_array.shape[2]):319 pixel_im = image_array[slice][i][j]320 pixel_mask = mask_array[slice][i][j]321 if pixel_im == 0 and pixel_mask == 1:322 print('Tumor outside of DWI', slice)323 keep = 1324 break325 else:326 continue327 break328 if keep == 1:329 print('Not adding slice number', slice)330 else:331 slices_to_keep.append(slice)332 keep = 0333 else:334 print(dataframe[column][row], 'does not exist')335 #Print which slices we want to keep336 print(slices_to_keep)337 #Get the x- and y-dimensions of the images and masks338 x_dim = int(mask_array.shape[1])339 y_dim = int(mask_array.shape[2])340 #Create new image and mask arrays with the shape of the original image and mask objects, and with341 #the same number of slices as saved in tumor_slices list342 new_mask_array = np.zeros((len(slices_to_keep), x_dim, y_dim))343 new_image_array = np.zeros((len(slices_to_keep), x_dim, y_dim))344 for k in range(len(slices_to_keep)):345 new_mask_array[k][:][:] = mask_array[slices_to_keep[k]][:][:]346 #Create mask from new arrays347 new_mask = sitk.GetImageFromArray(new_mask_array)348 #Save the masks (only containing tumor) in the destination paths349 sitk.WriteImage(new_mask, dataframe['mask'][row])350 #Create new images for all of the image files, and save them351 for column in dataframe.columns[:-1]:352 print(dataframe[column][row])353 if os.path.isfile(dataframe[column][row]):354 image = sitk.ReadImage(dataframe[column][row])355 print('Original image size:', image.GetSize())356 image_array = sitk.GetArrayFromImage(image)357 for k in range(len(slices_to_keep)):358 new_image_array[k][:][:] = image_array[slices_to_keep[k]][:][:]359 new_image = sitk.GetImageFromArray(new_image_array)360 print('New image size:', new_image.GetSize())361 im_filename = column + '.nii'362 sitk.WriteImage(new_image, os.path.join(dst_folders[row], im_filename))363 else:364 print(dataframe[column][row], 'does not exist')365if __name__ == '__main__':366 #Oxy_patientPaths, Oxy_patientNames, Oxy_imagePaths, Oxy_maskPaths = gd.get_paths('/Volumes/LaCie/MasterThesis_Ingvild/Data/LARC/TumorSlices/LARC_cropped_TS_new', 'image.nii', '1 RTSTRUCT LARC_MRS1-label.nii')367 Oxy_patientPaths, Oxy_PatientNames, Oxy_imagePaths, Oxy_maskPaths = gd.get_paths('/Volumes/LaCie/MasterThesis_Ingvild/Data/dwi/Oxy_all_cropped', 'b4', 'an.nii')368 Oxy_df = p.dataframe(Oxy_patientPaths, Oxy_PatientNames, Oxy_imagePaths, Oxy_maskPaths)369 Oxy_df = p.dimensions(Oxy_df)370 #remove_nonTumor_slices(Oxy_df)371#Oxy_patientPaths, Oxy_PatientNames, Oxy_imagePaths, Oxy_maskPaths = gd.get_paths('/Volumes/Untitled 1/Ingvild_Oxytarget', 'T2', 'an.nii')372#Create dataframe with information373#Oxy_df = p.dataframe(Oxy_patientPaths, Oxy_PatientNames, Oxy_imagePaths, Oxy_maskPaths)374#Oxy_df = p.dimensions(Oxy_df)375#Create list of destination paths376#dst_paths = uf.create_dst_paths('/Volumes/LaCie/MasterThesis_Ingvild/Oxy_cropped_corrected')377#crop_images(Oxy_df, 352, dst_paths, 'T2.nii', 'Manual_an.nii', 1000)...

Full Screen

Full Screen

main.py

Source:main.py Github

copy

Full Screen

1# Others2import time3import keyboard4# Pet5from monitor import init_monitors6from pet import Pet7from pet import PetState8# Systems9from idle import Idle10from stroll import Stroll11from headpat import Headpat12from got_mouse import GotMouse13from chase_mouse import ChaseMouse14from scream import Scream15from open_window import *16from move_window import *17def quit_combination():18 return keyboard.is_pressed("ctrl") and keyboard.is_pressed('alt') and keyboard.is_pressed('2') and keyboard.is_pressed('9') and keyboard.is_pressed('Y')19if __name__ == "__main__":20 monitor.init_monitors()21 # Pet22 pet = Pet()23 24 # Systems25 idle = Idle(0, PetState.IDLE)26 stroll = Stroll(0, PetState.STROLL)27 headpat = Headpat(6, PetState.HEADPAT)28 chase_mouse = ChaseMouse(0, PetState.CHASE_MOUSE)29 got_mouse = GotMouse(0, PetState.GOT_MOUSE)30 open_window = OpenWindow(0, PetState.OPEN_WINDOW)31 move_window = MoveWindow(0, PetState.MOVE_WINDOW)32 scream = Scream(0, PetState.SCREAM)33 34 # Main Loop35 prev_time = time.time()36 while True:37 # Calculate delta time.38 curr_time = time.time()39 delta_time = curr_time - prev_time40 prev_time = curr_time41 # System Update42 idle.update(pet, delta_time)43 stroll.update(pet, delta_time)44 headpat.update(pet, delta_time)45 chase_mouse.update(pet, delta_time)46 got_mouse.update(pet, delta_time)47 open_window.update(pet, delta_time)48 move_window.update(pet, delta_time)49 scream.update(pet, delta_time)50 # Pet Update51 pet.update(delta_time)52 pet.track_footprints()53 # Exit the application, can be changed.54 if quit_combination():55 break56 # if keyboard.is_pressed("1"):57 # pet.change_state(PetState.IDLE)58 # elif keyboard.is_pressed("2"):59 # pet.change_state(PetState.STROLL)60 # elif keyboard.is_pressed("3"):61 # pet.change_state(PetState.CHASE_MOUSE)62 # elif keyboard.is_pressed("4"):63 # pet.change_state(PetState.OPEN_WINDOW)64 # elif keyboard.is_pressed("5"):65 # pet.change_state(PetState.MOVE_WINDOW)66 # elif keyboard.is_pressed("6"):67 # pet.change_state(PetState.HEADPAT)68 # elif keyboard.is_pressed("7"):...

Full Screen

Full Screen

rabin_karp.py

Source:rabin_karp.py Github

copy

Full Screen

...12 #start index of current window13 self.window_start = 014 #end of index window15 self.window_end = size_word16 def move_window(self):17 if self.window_end <= len(self.text) - 1:18 #remove left letter from hash value19 self.hash -= (ord(self.text[self.window_start]) - ord("a")+1)*26**(self.size_word-1)20 self.hash *= 2621 self.hash += ord(self.text[self.window_end])- ord("a")+122 self.window_start += 123 self.window_end += 124 def window_text(self):25 return self.text[self.window_start:self.window_end]26def rabin_karp(word, text):27 if word == "" or text == "":28 return None29 if len(word) > len(text):30 return None31 rolling_hash = RollingHash(text, len(word))32 word_hash = RollingHash(word, len(word))33 #word_hash.move_window()34 for i in range(len(text) - len(word) + 1):35 if rolling_hash.hash == word_hash.hash:36 if rolling_hash.window_text() == word:37 return i38 rolling_hash.move_window()...

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run AutoItDriverServer automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful