Best Python code snippet using AutoItDriverServer_python
crop_images.py
Source:crop_images.py  
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)...main.py
Source:main.py  
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"):...rabin_karp.py
Source:rabin_karp.py  
...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()...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!!
