Best Python code snippet using Kiwi_python
Test_Sorting.py
Source:Test_Sorting.py  
1"""Module Documentation here2"""3#=========================================================================================4# Licence, Reference and Credits5#=========================================================================================6__copyright__ = "Copyright (C) CCPN project (http://www.ccpn.ac.uk) 2014 - 2019"7__credits__ = ("Ed Brooksbank, Luca Mureddu, Timothy J Ragan & Geerten W Vuister")8__licence__ = ("CCPN licence. See http://www.ccpn.ac.uk/v3-software/downloads/license")9__reference__ = ("Skinner, S.P., Fogh, R.H., Boucher, W., Ragan, T.J., Mureddu, L.G., & Vuister, G.W.",10                 "CcpNmr AnalysisAssign: a flexible platform for integrated NMR analysis",11                 "J.Biomol.Nmr (2016), 66, 111-124, http://doi.org/10.1007/s10858-016-0060-y")12#=========================================================================================13# Last code modification14#=========================================================================================15__modifiedBy__ = "$modifiedBy: CCPN $"16__dateModified__ = "$dateModified: 2017-07-07 16:32:35 +0100 (Fri, July 07, 2017) $"17__version__ = "$Revision: 3.0.0 $"18#=========================================================================================19# Created20#=========================================================================================21__author__ = "$Author: CCPN $"22__date__ = "$Date: 2017-04-07 10:28:41 +0000 (Fri, April 07, 2017) $"23#=========================================================================================24# Start of code25#=========================================================================================26import math27from collections import OrderedDict28import numpy29import pandas30from ccpn import core31from ccpn.core.lib import CcpnSorting32from ccpn.core.testing.WrapperTesting import WrapperTesting33from ccpn.util import Sorting34class SortingData(WrapperTesting):35    # Path of project to load (None for new project36    projectPath = None37    # Data for sorting tests.38    # All data are in correct sorting order as given here39    specials = [None, False, True, ]40    reals = [float('NaN'), float('-Infinity'), -12, -2, -1, -0.1, 0, 1.1e-1,41             1, 2, 12, float('Infinity'), ]42    negstrings = ['', 'NaN', '-Infinity', '-12', '-2', '-1', '-0.1', ]43    zerostrings = ['+0', '+0.', '+0.0', '-.0', '-0', '-0.0', '.0', '0', '0.0', '0.0 ', ]44    posstrings = ['1.1e-12', ' 1', '+1', '1', '1.', '1.0', '2', '12', 'Infinity', ]45    strings2 = [' ', ' z', ' z.', '#', '+ 0.0', '.0-', '@', 'A', 'B',46                'Z', 'Z.', 'a', 'blah', 'blah2', 'blahblah', 'z', ]47    chainCodes = ['1', '2', '15', '#1', '@-2', '@1',48                  '@1', '@2', '@12', '@-', '@A', '@a', 'A', 'A2', 'Z', 'a', 'z', ]49    sequenceCodes = ['-1', ' 1', '+1', '1', '1b', '1.', '2b', '2b-11', '2b-2.', '2b-1', '2b+0', '2b-0',50                     '2b0', '2b+1', '2b+2', '2b2', '2b.', '2b@11', '2ba', '15.', '#1', '#2', '#11', '#11-1',51                     '#11+1', '#105', '@-11', '@-2', '@-1', '@0', '@1', '@2', '@11', '@-', '@@a',52                     '@A']53    sequenceCodes2 = ['-1', '+1', '1', '1b', '2b', '2b-11', '2b-2.', '2b-1', '2b+0', '2b-0',54                      '2b0', '2b+1', '2b+2', '2b2', '2b@11', '2ba', '#1', '#2', '#11', '#11-1',55                      '#11+1', '#105', '@-11', '@-2', '@-1', '@0', '@1', '@2', '@11', '@-', '@@a',56                      '@A']57    atomNames = ['C', 'C@2', 'CA', 'CB', 'CD', 'CD1', 'CD2', 'CD%', 'CD*', 'CDx', 'CDy',58                 'H', 'H1', 'H2', 'H3', 'H#', 'H%', 'H*', 'H@1', 'H@2', 'H@15', 'HG', 'HG1', 'HG1%',59                 'HG2', 'HG3', 'HG%', 'HG*', 'HGx', 'HGy', ]60    tuples = [(1, 'a'), ('1', 'b')]61    lists = [[1, 'a'], ['1', 'b']]62    dicts = [63        {float('NaN'): None, 1: 1, 'a': 'b', False: True, (): (), (): [], },64        {float('NaN'): None, 1: 1, 'a': 'b', False: True, (): (), (): [], frozenset(): {}},65        {float('NaN'): None, 1: 1, 'a': 'b', False: True, (): (), (): (), frozenset(): {}},66        {False: True, 1: 1, 'a': 'b', 2: None, (): (), (): [], frozenset(): {}},67        {'a': 'a', 1: 3},68        OrderedDict((('a', ''), (1, 0))),69        ]70    bytes = [b' 124', b'absd', ]71    mixed = [pandas.DataFrame(), pandas.Series(), complex(1, 2), complex(11, 0), complex(1),72             frozenset(()), lambda: 1, Sorting.stringSortKey, Sorting.universalSortKey,73             core, Sorting, math, numpy,74             numpy.array([1., 2.]), numpy.array([[1, 2], [3, 4]]), numpy.array(['a', 'b', 'c', 'd'], ),75             set(), set((1,)), set((1, 9, 11)), set((2, 1)),76             ]77    pids = ['NR:@-.@1', 'NR:@-.@1-1.', 'NR:@-.@1+0.', 'NR:@-.@1+1.', 'NR:@-.@1.', ]78    data1 = (79        ['1st place', '2nd place', '10th place'],80        ['127.0.0.55', '127.0.0.100'],81        ['0.01', '0.1', '1'],82        ['0.501', '0.55'],83        ['CASE', 'SENSITIVE', 'case', 'sensitive'],84        ['image1.jpg', 'image3.jpg', 'image12.jpg', 'image15.jpg'],85        ['Elm2', 'Elm11', 'Elm12', 'elm0', 'elm1', 'elm9', 'elm10', 'elm13'],86        ['@1.127b..H@2', '@1.127b..H@15', ],87        ['', 'NaN', '-1', '-1A', '0.0', '1', '2', '15', '3.2e12', 'Inf', 'Ahh', 'b', 'b2', 'bb', 'ciao']88        )89    data2 = (90        [0.01, 0.1, 1],91        [0.501, 0.55],92        [[1, 'a'], ['1', 'b'], (1, 'a'), ('1', 'b'), b' 124', b'absd', ],93        [0, 1.0, 1.0, lambda: 1, ],94        [95            {1: 1, 'a': 'b', None: None, False: True, (): (), (): {}, frozenset(): {}},96            {1: 1, 'a': 'b', None: None, False: True, (): (), (): [], frozenset(): {}},97            {1: 1, 'a': 'b', None: None, False: True, (): (), (): (), frozenset(): {}},98            {1: 1, 'a': 'b', 2: None, False: True, (): (), (): [], frozenset(): {}},99            {'a': 'a', 1: 3},100            OrderedDict((('a', ''), (1, 0))),101            ]102        )103    data3 = [0.0, 1, (1 + 0j), False, (2 + 3j)]104    data4 = [None, False, True, float('NaN'), float('-inf'), 0.1, 1.0, float('inf'), '',105             'NaN', '-1', '-1.', '0.0.', '0.01.', '0.1e-7.', '0.0', '0.1e-7', '0.01', '1', '1.0.', '1.', '1.0',106             'Infinity', '-Infinity.', 'NaN.',107             ]108    data5 = ['', 'NaN', '-1', '-1A', '0.0', '1', '2', '15', '3.2e12', 'Inf',109             'Ahh', 'b', 'b2', 'b12', 'bb', 'ciao']110    data6 = ['2,500 items', '2,500.1 items', '2.5 items', '3.5 items', '15 items']111    data7 = ['@1.127b-1..H@2', '@1.127b+0..H@2', '@1.127b-0..H@2', '@1.127b+1..H@2',112             '@1.127b1..H@2', '@1.127b..H@15', ]113class StdSortingTest(SortingData):114    sortKeys = {115        'universal': Sorting.universalNaturalSortKey,116        'string'   : Sorting.stringSortKey117        }118    def test_string_sorting_1(self):119        for ll in self.data1:120            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])121            self.assertEqual(ll2, ll)122    def test_string_sorting_5(self):123        ll = self.data5124        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])125        self.assertEqual(ll2, ll)126    def test_string_sorting_6(self):127        ll = self.data6128        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])129        self.assertEqual(ll2, ll)130    def test_string_sorting_7(self):131        ll = self.data7132        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])133        self.assertEqual(ll2, ll)134    def test_mixed_sorting_1(self):135        for ll in self.data1:136            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])137            self.assertEqual(ll2, ll)138    def test_mixed_sorting_2(self):139        for ll in self.data2:140            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])141            self.assertEqual(ll2, ll)142    def test_mixed_sorting_3(self):143        self.assertEqual(sorted(self.data3, key=self.sortKeys['universal'])[:3], [False, 0.0, 1])144    def test_mixed_sorting_4(self):145        ll = self.data4146        ll2 = sorted(list(reversed(self.data4)), key=self.sortKeys['universal'])147        self.assertEqual(ll2[:3], ll[:3])148        self.assertEqual(ll2[4:], ll[4:])149        self.assertTrue(math.isnan(ll2[3]))150    def test_sort_pids(self):151        ll = self.pids152        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])153        self.assertEqual(ll2, ll)154    def test_sort_specials(self):155        ll = self.specials156        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])157        self.assertEqual(ll2, ll)158    def test_sort_reals(self):159        ll = self.reals160        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])161        self.assertEqual(ll2, ll)162    def test_sort_negstrings(self):163        ll = self.negstrings164        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])165        self.assertEqual(ll2, ll)166    def test_sort_zerostrings(self):167        ll = self.zerostrings168        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])169        self.assertEqual(ll2, ll)170    def test_sort_posstrings(self):171        ll = self.posstrings172        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])173        self.assertEqual(ll2, ll)174    def test_sort_strings2(self):175        ll = self.strings2176        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])177        self.assertEqual(ll2, ll)178    def test_sort_chainCodes(self):179        ll = self.chainCodes180        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])181        self.assertEqual(ll2, ll)182    def test_sort_sequenceCodes(self):183        ll = self.sequenceCodes184        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])185        self.assertEqual(ll2, ll)186    def test_sort_sequenceCodes2(self):187        ll = self.sequenceCodes2188        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])189        self.assertEqual(ll2, ll)190    def test_sort_atomNames(self):191        ll = self.atomNames192        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])193        self.assertEqual(ll2, ll)194    def test_sort_tuples(self):195        ll = self.tuples196        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])197        self.assertEqual(ll2, ll)198    def test_sort_lists(self):199        ll = self.lists200        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])201        self.assertEqual(ll2, ll)202    def test_sort_dicts(self):203        ll = self.dicts204        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])205        self.assertEqual(ll2, ll)206    def test_sort_mixed(self):207        ll = [float('NaN')] + self.mixed208        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])209        # NB the skipped parts sort by id and so cannot be tested properly210        self.assertTrue(math.isnan(ll2[0]))211        self.assertEqual(ll2[7:-7], ll[7:-7])212        testClassNames = ['DataFrame', 'Series', 'complex', 'complex', 'complex', 'frozenset']213        self.assertTrue(tt[0].__class__.__name__ == tt[1] for tt in zip(ll2[1:7], testClassNames))214        self.assertTrue(all(x.__class__.__name__ == 'set' for x in ll2[-4:]))215        self.assertTrue(all(x.__class__.__name__ == 'ndarray' for x in ll2[-7:-4]))216    def test_sort_all_1(self):217        ll = (self.specials + self.reals + self.negstrings + self.zerostrings + self.posstrings218              + self.strings2 + self.dicts + self.lists + self.tuples + self.bytes)219        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])220        self.assertTrue(math.isnan(ll2[3]))221        self.assertEqual(ll2[:3], ll[:3])222        self.assertEqual(ll2[4:], ll[4:])223    def test_sort_all_2(self):224        ll = (self.specials + self.reals + self.negstrings + self.zerostrings + self.posstrings225              + self.strings2 + self.dicts + self.lists + self.tuples + self.bytes + self.mixed)226        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])227        self.assertEqual(ll2[:3], ll[:3])228        self.assertEqual(ll2[4:-len(self.mixed)], ll[4:-len(self.mixed)])229        self.assertTrue(math.isnan(ll2[3]))230class CcpnSortingTest(SortingData):231    sortKeys = {232        'universal': CcpnSorting.universalSortKey,233        'string'   : CcpnSorting.stringSortKey234        }235    # Different sorting order for these examples236    data6 = ['2.5 items', '2,500.1 items', '2,500 items', '3.5 items', '15 items']237    data7 = ['@1.127b-1..H@2', '@1.127b..H@15', '@1.127b+0..H@2', '@1.127b-0..H@2', '@1.127b+1..H@2',238             '@1.127b1..H@2', ]239    pids = ['NR:@-.@1-1.', 'NR:@-.@1', 'NR:@-.@1.', 'NR:@-.@1+0.', 'NR:@-.@1+1.', ]240    sequenceCodes = ['-1', ' 1', '+1', '1', '1b', '1.', '2b-11', '2b-2.', '2b-1', '2b', '2b.',241                     '2b+0', '2b-0', '2b0',242                     '2b+1', '2b+2', '2b2', '2b@11', '2ba', '15.', '#1', '#2', '#11-1', '#11',243                     '#11+1', '#105', '@-11', '@-2', '@-1', '@0', '@1', '@2', '@11', '@-', '@@a',244                     '@A']245    sequenceCodes2 = ['-1', '+1', '1', '1b', '2b-11', '2b-2.', '2b-1', '2b', '2b+0', '2b-0',246                      '2b0', '2b+1', '2b+2', '2b2', '2b@11', '2ba', '#1', '#2', '#11-1', '#11',247                      '#11+1', '#105', '@-11', '@-2', '@-1', '@0', '@1', '@2', '@11', '@-', '@@a',248                      '@A']249    def test_string_sorting_1(self):250        for ll in self.data1:251            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])252            self.assertEqual(ll2, ll)253    def test_string_sorting_5(self):254        ll = self.data5255        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])256        self.assertEqual(ll2, ll)257    def test_string_sorting_6(self):258        ll = self.data6259        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])260        self.assertEqual(ll2, ll)261    def test_string_sorting_7(self):262        ll = self.data7263        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['string'])264        self.assertEqual(ll2, ll)265    def test_mixed_sorting_1(self):266        for ll in self.data1:267            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])268            self.assertEqual(ll2, ll)269    def test_mixed_sorting_2(self):270        for ll in self.data2:271            ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])272            self.assertEqual(ll2, ll)273    def test_mixed_sorting_3(self):274        self.assertEqual(sorted(self.data3, key=self.sortKeys['universal'])[:3], [False, 0.0, 1])275    def test_mixed_sorting_4(self):276        ll = self.data4277        ll2 = sorted(list(reversed(self.data4)), key=self.sortKeys['universal'])278        self.assertEqual(ll2[:3], ll[:3])279        self.assertEqual(ll2[4:], ll[4:])280        self.assertTrue(math.isnan(ll2[3]))281    def test_sort_pids(self):282        ll = self.pids283        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])284        self.assertEqual(ll2, ll)285    def test_sort_specials(self):286        ll = self.specials287        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])288        self.assertEqual(ll2, ll)289    def test_sort_reals(self):290        ll = self.reals291        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])292        self.assertEqual(ll2, ll)293    def test_sort_negstrings(self):294        ll = self.negstrings295        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])296        self.assertEqual(ll2, ll)297    def test_sort_zerostrings(self):298        ll = self.zerostrings299        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])300        self.assertEqual(ll2, ll)301    def test_sort_posstrings(self):302        ll = self.posstrings303        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])304        self.assertEqual(ll2, ll)305    def test_sort_strings2(self):306        ll = self.strings2307        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])308        self.assertEqual(ll2, ll)309    def test_sort_chainCodes(self):310        ll = self.chainCodes311        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])312        self.assertEqual(ll2, ll)313    def test_sort_sequenceCodes(self):314        ll = self.sequenceCodes315        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])316        self.assertEqual(ll2, ll)317    def test_sort_sequenceCodes2(self):318        ll = self.sequenceCodes2319        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])320        self.assertEqual(ll2, ll)321    def test_sort_atomNames(self):322        ll = self.atomNames323        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])324        self.assertEqual(ll2, ll)325    def test_sort_tuples(self):326        ll = self.tuples327        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])328        self.assertEqual(ll2, ll)329    def test_sort_lists(self):330        ll = self.lists331        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])332        self.assertEqual(ll2, ll)333    def test_sort_dicts(self):334        ll = self.dicts335        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])336        self.assertEqual(ll2, ll)337    def test_sort_mixed(self):338        ll = [float('NaN')] + self.mixed339        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])340        # NB the skipped parts sort by id and so cannot be tested properly341        self.assertTrue(math.isnan(ll2[0]))342        self.assertEqual(ll2[7:-7], ll[7:-7])343        testClassNames = ['DataFrame', 'Series', 'complex', 'complex', 'complex', 'frozenset']344        self.assertTrue(tt[0].__class__.__name__ == tt[1] for tt in zip(ll2[1:7], testClassNames))345        self.assertTrue(all(x.__class__.__name__ == 'set' for x in ll2[-4:]))346        self.assertTrue(all(x.__class__.__name__ == 'ndarray' for x in ll2[-7:-4]))347    def test_sort_all_1(self):348        ll = (self.specials + self.reals + self.negstrings + self.zerostrings + self.posstrings349              + self.strings2 + self.dicts + self.lists + self.tuples + self.bytes)350        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])351        self.assertTrue(math.isnan(ll2[3]))352        self.assertEqual(ll2[:3], ll[:3])353        self.assertEqual(ll2[4:], ll[4:])354    def test_sort_all_2(self):355        ll = (self.specials + self.reals + self.negstrings + self.zerostrings + self.posstrings356              + self.strings2 + self.dicts + self.lists + self.tuples + self.bytes + self.mixed)357        ll2 = sorted(list(reversed(ll)), key=self.sortKeys['universal'])358        self.assertEqual(ll2[:3], ll[:3])359        self.assertEqual(ll2[4:-len(self.mixed)], ll[4:-len(self.mixed)])...xbmcUtils.py
Source:xbmcUtils.py  
1# -*- coding: utf-8 -*-2import xbmcgui, xbmc, xbmcplugin3enable_debug = False4#######################################5# Xbmc Helpers6#######################################7def select(title, menuItems):8    select = xbmcgui.Dialog().select(title, menuItems)9    if select == -1:10        return None11    else:12        return menuItems[select]13def getKeyboard(default = '', heading = '', hidden = False):14    kboard = xbmc.Keyboard(default, heading, hidden)15    kboard.doModal()16    if kboard.isConfirmed():17        return kboard.getText()18    return ''19def getImage(title):20    dialog = xbmcgui.Dialog()21    image = dialog.browse(1, title, 'pictures', '.jpg|.png', True)22    return image23def showMessage(msg):24    xbmc.executebuiltin('Notification(SportsDevil,' + str(msg.encode('utf-8', 'ignore')) + ')')25    26    27def showBusyAnimation():28    xbmc.executebuiltin( 'ActivateWindow(busydialog)' )29    30def hideBusyAnimation():31    xbmc.executebuiltin( 'Dialog.Close(busydialog,true)' )32    33def closeAllDialogs():34    xbmc.executebuiltin('Dialog.Close(all, true)') 35    36    37def log(msg):38    if enable_debug:39        try:40            xbmc.log(msg)41        except:42            xbmc.log(msg.encode('utf-8'))        43def setSortMethodsForCurrentXBMCList(handle, sortKeys):44    45    def addSortMethod(method):46        xbmcplugin.addSortMethod(handle = handle, sortMethod = method)47    48    if not sortKeys or sortKeys==[]: 49        addSortMethod(xbmcplugin.SORT_METHOD_UNSORTED)50    else:     51        if 'name' in sortKeys:52            addSortMethod(xbmcplugin.SORT_METHOD_LABEL)53        if 'size' in sortKeys:54            addSortMethod(xbmcplugin.SORT_METHOD_SIZE)55        if 'duration' in sortKeys:56            addSortMethod(xbmcplugin.SORT_METHOD_DURATION)57        if 'genre' in sortKeys:58            addSortMethod(xbmcplugin.SORT_METHOD_GENRE)59        if 'rating' in sortKeys:60            addSortMethod(xbmcplugin.SORT_METHOD_VIDEO_RATING)61        if 'date' in sortKeys:62            addSortMethod(xbmcplugin.SORT_METHOD_DATE)63        if 'file' in sortKeys:64            addSortMethod(xbmcplugin.SORT_METHOD_FILE)65            66            67            68def getContainerFolderPath():   69    return xbmc.getInfoLabel('Container.FolderPath')70def getListItemPath():71    return xbmc.getInfoLabel('ListItem.Path')72def getCurrentWindow():73    return xbmc.getInfoLabel('System.CurrentWindow')74def getCurrentControl():75    return xbmc.getInfoLabel('System.CurrentControl')76def getCurrentWindowXmlFile():...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!!
