How to use element_find method in Robotframework-anywherelibrary

Best Python code snippet using robotframework-anywherelibrary

_element.py

Source:_element.py Github

copy

Full Screen

...29 """Click element identified by `locator`.30 Key attributes for arbitrary elements are `index` and `name`. See31 `introduction` for details about locating elements.32 """33 if self.element_find("xpath=" + xpath, False, False):34 self._info("Clicking element '%s'." % xpath)35 element =self.element_find("xpath=" + xpath, False, False)36 return element37 def click_element_by_xpath(self, xpath):38 """Click element identified by `locator`.39 Key attributes for arbitrary elements are `index` and `name`. See40 `introduction` for details about locating elements.41 """42 if self.element_find("xpath=" + xpath, False, False):43 self._info("Clicking element '%s'." % xpath)44 element =self.element_find("xpath=" + xpath, False, False)45 if len(element) > 0:46 element[0].click()47 else:48 element.click()49 def click_element(self, locator):50 """Click element identified by `locator`.51 Key attributes for arbitrary elements are `index` and `name`. See52 `introduction` for details about locating elements.53 """54 self._info("Clicking element '%s'." % locator)55 self.element_find(locator, True, True).click()56 def click_button(self, index_or_name):57 """ Click button """58 _platform_class_dict = {'ios': 'UIAButton',59 'android': 'android.widget.Button'}60 if self._is_support_platform(_platform_class_dict):61 class_name = self._get_class(_platform_class_dict)62 self._click_element_by_class_name(class_name, index_or_name)63 def click_text(self, text, exact_match=False):64 """Click text identified by ``text``.65 By default tries to click first text involves given ``text``, if you would66 like to click exactly matching text, then set ``exact_match`` to `True`.67 If there are multiple use of ``text`` and you do not want first one,68 use `locator` with `Get Web Elements` instead.69 """70 self.element_find_by_text(text,exact_match).click()71 def input_text(self, locator, text):72 """Types the given `text` into text field identified by `locator`.73 See `introduction` for details about locating elements.74 """75 self._info("Typing text '%s' into text field '%s'" % (text, locator))76 self._element_input_text_by_locator(locator, text)77 def input_password(self, locator, text):78 """Types the given password into text field identified by `locator`.79 Difference between this keyword and `Input Text` is that this keyword80 does not log the given password. See `introduction` for details about81 locating elements.82 """83 self._info("Typing password into text field '%s'" % locator)84 self._element_input_text_by_locator(locator, text)85 def input_value(self, locator, text):86 """Sets the given value into text field identified by `locator`. This is an IOS only keyword, input value makes use of set_value87 See `introduction` for details about locating elements.88 """89 self._info("Setting text '%s' into text field '%s'" % (text, locator))90 self._element_input_value_by_locator(locator, text)91 def hide_keyboard(self, key_name=None):92 """Hides the software keyboard on the device. (optional) In iOS, use `key_name` to press93 a particular key, ex. `Done`. In Android, no parameters are used.94 """95 driver = self._current_application()96 driver.hide_keyboard(key_name)97 def is_keyboard_shown(self):98 """Return true if Android keyboard is displayed or False if not displayed99 No parameters are used.100 """101 driver = self._current_application()102 return driver.is_keyboard_shown()103 def page_should_contain_text(self, text, loglevel='INFO'):104 """Verifies that current page contains `text`.105 If this keyword fails, it automatically logs the page source106 using the log level specified with the optional `loglevel` argument.107 Giving `NONE` as level disables logging.108 """109 if not self._is_text_present(text):110 self.log_source(loglevel)111 raise AssertionError("Page should have contained text '%s' "112 "but did not" % text)113 self._info("Current page contains text '%s'." % text)114 def page_should_not_contain_text(self, text, loglevel='INFO'):115 """Verifies that current page not contains `text`.116 If this keyword fails, it automatically logs the page source117 using the log level specified with the optional `loglevel` argument.118 Giving `NONE` as level disables logging.119 """120 if self._is_text_present(text):121 self.log_source(loglevel)122 raise AssertionError("Page should not have contained text '%s'" % text)123 self._info("Current page does not contains text '%s'." % text)124 def page_should_contain_element(self, locator, loglevel='INFO'):125 """Verifies that current page contains `locator` element.126 If this keyword fails, it automatically logs the page source127 using the log level specified with the optional `loglevel` argument.128 Giving `NONE` as level disables logging.129 """130 if not self._is_element_present(locator):131 self.log_source(loglevel)132 raise AssertionError("Page should have contained element '%s' "133 "but did not" % locator)134 self._info("Current page contains element '%s'." % locator)135 def page_should_not_contain_element(self, locator, loglevel='INFO'):136 """Verifies that current page not contains `locator` element.137 If this keyword fails, it automatically logs the page source138 using the log level specified with the optional `loglevel` argument.139 Giving `NONE` as level disables logging.140 """141 if self._is_element_present(locator):142 self.log_source(loglevel)143 raise AssertionError("Page should not have contained element '%s'" % locator)144 self._info("Current page not contains element '%s'." % locator)145 def element_should_be_disabled(self, locator, loglevel='INFO'):146 """Verifies that element identified with locator is disabled.147 Key attributes for arbitrary elements are `id` and `name`. See148 `introduction` for details about locating elements.149 """150 if self.element_find(locator, True, True).is_enabled():151 self.log_source(loglevel)152 raise AssertionError("Element '%s' should be disabled "153 "but did not" % locator)154 self._info("Element '%s' is disabled ." % locator)155 def element_should_be_enabled(self, locator, loglevel='INFO'):156 """Verifies that element identified with locator is enabled.157 Key attributes for arbitrary elements are `id` and `name`. See158 `introduction` for details about locating elements.159 """160 if not self.element_find(locator, True, True).is_enabled():161 self.log_source(loglevel)162 raise AssertionError("Element '%s' should be enabled "163 "but did not" % locator)164 self._info("Element '%s' is enabled ." % locator)165 def element_should_be_visible(self, locator, loglevel='INFO'):166 """Verifies that element identified with locator is visible.167 Key attributes for arbitrary elements are `id` and `name`. See168 `introduction` for details about locating elements.169 New in AppiumLibrary 1.4.5170 """171 if not self.element_find(locator, True, True).is_displayed():172 self.log_source(loglevel)173 raise AssertionError("Element '%s' should be visible "174 "but did not" % locator)175 def element_name_should_be(self, locator, expected):176 element = self.element_find(locator, True, True)177 if str(expected) != str(element.get_attribute('name')):178 raise AssertionError("Element '%s' name should be '%s' "179 "but it is '%s'." % (locator, expected, element.get_attribute('name')))180 self._info("Element '%s' name is '%s' " % (locator, expected))181 def element_value_should_be(self, locator, expected):182 element = self.element_find(locator, True, True)183 if str(expected) != str(element.get_attribute('value')):184 raise AssertionError("Element '%s' value should be '%s' "185 "but it is '%s'." % (locator, expected, element.get_attribute('value')))186 self._info("Element '%s' value is '%s' " % (locator, expected))187 def element_attribute_should_match(self, locator, attr_name, match_pattern, regexp=False):188 """Verify that an attribute of an element matches the expected criteria.189 The element is identified by _locator_. See `introduction` for details190 about locating elements. If more than one element matches, the first element is selected.191 The _attr_name_ is the name of the attribute within the selected element.192 The _match_pattern_ is used for the matching, if the match_pattern is193 - boolean or 'True'/'true'/'False'/'false' String then a boolean match is applied194 - any other string is cause a string match195 The _regexp_ defines whether the string match is done using regular expressions (i.e. BuiltIn Library's196 [http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Should%20Match%20Regexp|Should197 Match Regexp] or string pattern match (i.e. BuiltIn Library's198 [http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Should%20Match|Should199 Match])200 Examples:201 | Element Attribute Should Match | xpath = //*[contains(@text,'foo')] | text | *foobar |202 | Element Attribute Should Match | xpath = //*[contains(@text,'foo')] | text | f.*ar | regexp = True |203 | Element Attribute Should Match | xpath = //*[contains(@text,'foo')] | enabled | True |204 | 1. is a string pattern match i.e. the 'text' attribute should end with the string 'foobar'205 | 2. is a regular expression match i.e. the regexp 'f.*ar' should be within the 'text' attribute206 | 3. is a boolead match i.e. the 'enabled' attribute should be True207 _*NOTE: *_208 On Android the supported attribute names are hard-coded in the209 [https://github.com/appium/appium/blob/master/lib/devices/android/bootstrap/src/io/appium/android/bootstrap/AndroidElement.java|AndroidElement]210 Class's getBoolAttribute() and getStringAttribute() methods.211 Currently supported (appium v1.4.11):212 _contentDescription, text, className, resourceId, enabled, checkable, checked, clickable, focusable, focused, longClickable, scrollable, selected, displayed_213 _*NOTE: *_214 Some attributes can be evaluated in two different ways e.g. these evaluate the same thing:215 | Element Attribute Should Match | xpath = //*[contains(@text,'example text')] | name | txt_field_name |216 | Element Name Should Be | xpath = //*[contains(@text,'example text')] | txt_field_name | |217 """218 elements = self.element_find(locator, False, True)219 if len(elements) > 1:220 self._info("CAUTION: '%s' matched %s elements - using the first element only" % (locator, len(elements)))221 attr_value = elements[0].get_attribute(attr_name)222 # ignore regexp argument if matching boolean223 if isinstance(match_pattern, bool) or match_pattern.lower() == 'true' or match_pattern.lower() == 'false':224 if isinstance(match_pattern, bool):225 match_b = match_pattern226 else:227 match_b = ast.literal_eval(match_pattern.title())228 if isinstance(attr_value, bool):229 attr_b = attr_value230 else:231 attr_b = ast.literal_eval(attr_value.title())232 self._bi.should_be_equal(match_b, attr_b)233 elif regexp:234 self._bi.should_match_regexp(attr_value, match_pattern,235 msg="Element '%s' attribute '%s' should have been '%s' "236 "but it was '%s'." % (locator, attr_name, match_pattern, attr_value),237 values=False)238 else:239 self._bi.should_match(attr_value, match_pattern,240 msg="Element '%s' attribute '%s' should have been '%s' "241 "but it was '%s'." % (locator, attr_name, match_pattern, attr_value),242 values=False)243 # if expected != elements[0].get_attribute(attr_name):244 # raise AssertionError("Element '%s' attribute '%s' should have been '%s' "245 # "but it was '%s'." % (locator, attr_name, expected, element.get_attribute(attr_name)))246 self._info("Element '%s' attribute '%s' is '%s' " % (locator, attr_name, match_pattern))247 def element_should_contain_text(self, locator, expected, message=''):248 """Verifies element identified by ``locator`` contains text ``expected``.249 If you wish to assert an exact (not a substring) match on the text250 of the element, use `Element Text Should Be`.251 Key attributes for arbitrary elements are ``id`` and ``xpath``. ``message`` can be used to override the default error message.252 New in AppiumLibrary 1.4.253 """254 self._info("Verifying element '%s' contains text '%s'."255 % (locator, expected))256 actual = self._get_text(locator)257 if not expected in actual:258 if not message:259 message = "Element '%s' should have contained text '%s' but "\260 "its text was '%s'." % (locator, expected, actual)261 raise AssertionError(message)262 def element_should_not_contain_text(self, locator, expected, message=''):263 """Verifies element identified by ``locator`` does not contain text ``expected``.264 ``message`` can be used to override the default error message.265 See `Element Should Contain Text` for more details.266 """267 self._info("Verifying element '%s' does not contain text '%s'."268 % (locator, expected))269 actual = self._get_text(locator)270 if expected in actual:271 if not message:272 message = "Element '%s' should not contain text '%s' but " \273 "it did." % (locator, expected)274 raise AssertionError(message)275 def element_text_should_be(self, locator, expected, message=''):276 """Verifies element identified by ``locator`` exactly contains text ``expected``.277 In contrast to `Element Should Contain Text`, this keyword does not try278 a substring match but an exact match on the element identified by ``locator``.279 ``message`` can be used to override the default error message.280 New in AppiumLibrary 1.4.281 """282 self._info("Verifying element '%s' contains exactly text '%s'."283 % (locator, expected))284 element = self.element_find(locator, True, True)285 actual = element.text286 if expected != actual:287 if not message:288 message = "The text of element '%s' should have been '%s' but "\289 "in fact it was '%s'." % (locator, expected, actual)290 raise AssertionError(message)291 def get_webelement(self, locator):292 """Returns the first [http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement|WebElement] object matching ``locator``.293 Example:294 | ${element} | Get Webelement | id=my_element |295 | Click Element | ${element} | |296 New in AppiumLibrary 1.4.297 """298 return self.element_find(locator, True, True)299 def get_webelements(self, locator):300 """Returns list of [http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement|WebElement] objects matching ``locator``.301 Example:302 | @{elements} | Get Webelements | id=my_element |303 | Click Element | @{elements}[2] | |304 This keyword was changed in AppiumLibrary 1.4 in following ways:305 - Name is changed from `Get Elements` to current one.306 - Deprecated argument ``fail_on_error``, use `Run Keyword and Ignore Error` if necessary.307 New in AppiumLibrary 1.4.308 """309 return self.element_find(locator, False, True)310 def get_element_attribute(self, locator, attribute):311 """Get element attribute using given attribute: name, value,...312 Examples:313 | Get Element Attribute | locator | name |314 | Get Element Attribute | locator | value |315 """316 elements = self.element_find(locator, False, True)317 ele_len = len(elements)318 if ele_len == 0:319 raise AssertionError("Element '%s' could not be found" % locator)320 elif ele_len > 1:321 self._info("CAUTION: '%s' matched %s elements - using the first element only" % (locator, len(elements)))322 try:323 attr_val = elements[0].get_attribute(attribute)324 self._info("Element '%s' attribute '%s' value '%s' " % (locator, attribute, attr_val))325 return attr_val326 except:327 raise AssertionError("Attribute '%s' is not valid for element '%s'" % (attribute, locator))328 def get_element_location(self, locator):329 """Get element location330 Key attributes for arbitrary elements are `id` and `name`. See331 `introduction` for details about locating elements.332 """333 element = self.element_find(locator, True, True)334 element_location = element.location335 self._info("Element '%s' location: %s " % (locator, element_location))336 return element_location337 def get_element_size(self, locator):338 """Get element size339 Key attributes for arbitrary elements are `id` and `name`. See340 `introduction` for details about locating elements.341 """342 element = self.element_find(locator, True, True)343 element_size = element.size344 self._info("Element '%s' size: %s " % (locator, element_size))345 return element_size346 def get_text(self, locator):347 """Get element text (for hybrid and mobile browser use `xpath` locator, others might cause problem)348 Example:349 | ${text} | Get Text | //*[contains(@text,'foo')] |350 New in AppiumLibrary 1.4.351 """352 text = self._get_text(locator)353 self._info("Element '%s' text is '%s' " % (locator, text))354 return text355 def get_matching_xpath_count(self, xpath):356 """Returns number of elements matching ``xpath``357 One should not use the `xpath=` prefix for 'xpath'. XPath is assumed.358 | *Correct:* |359 | ${count} | Get Matching Xpath Count | //android.view.View[@text='Test'] |360 | Incorrect: |361 | ${count} | Get Matching Xpath Count | xpath=//android.view.View[@text='Test'] |362 If you wish to assert the number of matching elements, use363 `Xpath Should Match X Times`.364 New in AppiumLibrary 1.4.365 """366 count = len(self.element_find("xpath=" + xpath, False, False))367 return str(count)368 def text_should_be_visible(self, text, exact_match=False, loglevel='INFO'):369 """Verifies that element identified with text is visible.370 New in AppiumLibrary 1.4.5371 """372 if not self.element_find_by_text(text, exact_match).is_displayed():373 self.log_source(loglevel)374 raise AssertionError("Text '%s' should be visible "375 "but did not" % text)376 def xpath_should_match_x_times(self, xpath, count, error=None, loglevel='INFO'):377 """Verifies that the page contains the given number of elements located by the given ``xpath``.378 One should not use the `xpath=` prefix for 'xpath'. XPath is assumed.379 | *Correct:* |380 | Xpath Should Match X Times | //android.view.View[@text='Test'] | 1 |381 | Incorrect: |382 | Xpath Should Match X Times | xpath=//android.view.View[@text='Test'] | 1 |383 ``error`` can be used to override the default error message.384 See `Log Source` for explanation about ``loglevel`` argument.385 New in AppiumLibrary 1.4.386 """387 actual_xpath_count = len(self.element_find("xpath=" + xpath, False, False))388 if int(actual_xpath_count) != int(count):389 if not error:390 error = "Xpath %s should have matched %s times but matched %s times"\391 %(xpath, count, actual_xpath_count)392 self.log_source(loglevel)393 raise AssertionError(error)394 self._info("Current page contains %s elements matching '%s'."395 % (actual_xpath_count, xpath))396 # Private397 def _is_index(self, index_or_name):398 if index_or_name.startswith('index='):399 return True400 else:401 return False402 def _click_element_by_name(self, name):403 driver = self._current_application()404 try:405 element = driver.find_element_by_name(name)406 except Exception as e:407 raise e408 try:409 element.click()410 except Exception as e:411 raise 'Cannot click the element with name "%s"' % name412 def find_elements_by_class_name(self, class_name):413 driver = self._current_application()414 elements = driver.find_elements_by_class_name(class_name)415 return elements416 def _find_element_by_class_name(self, class_name, index_or_name):417 elements = self._find_elements_by_class_name(class_name)418 if self._is_index(index_or_name):419 try:420 index = int(index_or_name.split('=')[-1])421 element = elements[index]422 except (IndexError, TypeError):423 raise 'Cannot find the element with index "%s"' % index_or_name424 else:425 found = False426 for element in elements:427 self._info("'%s'." % element.text)428 if element.text == index_or_name:429 found = True430 break431 if not found:432 raise 'Cannot find the element with name "%s"' % index_or_name433 return element434 def _get_class(self, platform_class_dict):435 return platform_class_dict.get(self._get_platform())436 def _is_support_platform(self, platform_class_dict):437 return self._get_platform() in platform_class_dict438 def _click_element_by_class_name(self, class_name, index_or_name):439 element = self._find_element_by_class_name(class_name, index_or_name)440 self._info("Clicking element '%s'." % element.text)441 try:442 element.click()443 except Exception as e:444 raise 'Cannot click the %s element "%s"' % (class_name, index_or_name)445 def _element_clear_text_by_locator(self, locator):446 try:447 element = self.element_find(locator, True, True)448 element.clear()449 except Exception as e:450 raise e451 def _element_input_text_by_locator(self, locator, text):452 try:453 element = self.element_find(locator, True, True)454 element.send_keys(text)455 except Exception as e:456 raise e457 def _element_input_text_by_class_name(self, class_name, index_or_name, text):458 try:459 element = self._find_element_by_class_name(class_name, index_or_name)460 except Exception as e:461 raise e462 self._info("input text in element as '%s'." % element.text)463 try:464 element.send_keys(text)465 except Exception as e:466 raise 'Cannot input text "%s" for the %s element "%s"' % (text, class_name, index_or_name)467 def _element_input_value_by_locator(self, locator, text):468 try:469 element = self.element_find(locator, True, True)470 element.set_value(text)471 except Exception as e:472 raise e473 def element_find(self, locator, first_only, required, tag=None):474 application = self._current_application()475 elements = None476 if isstr(locator):477 _locator = locator478 elements = self.element_finder.find(application, _locator, tag)479 if required and len(elements) == 0:480 raise ValueError("Element locator '" + locator + "' did not match any elements.")481 if first_only:482 if len(elements) == 0: return None483 return elements[0]484 elif isinstance(locator, WebElement):485 if first_only:486 return locator487 else:488 elements = [locator]489 # do some other stuff here like deal with list of webelements490 # ... or raise locator/element specific error if required491 return elements492 def element_find_by_text(self, text, exact_match=False):493 if self._get_platform() == 'ios':494 element = self.element_find(text, True, False)495 if element:496 return element497 else:498 if exact_match:499 _xpath = u'//*[@value="{}" or @label="{}"]'.format(text, text)500 else:501 _xpath = u'//*[contains(@label,"{}") or contains(@value, "{}")]'.format(text, text)502 return self.element_find(_xpath, True, True)503 elif self._get_platform() == 'android':504 if exact_match:505 _xpath = u'//*[@{}="{}"]'.format('text', text)506 else:507 _xpath = u'//*[contains(@{},"{}")]'.format('text', text)508 return self.element_find(_xpath, True, True)509 def _get_text(self, locator):510 element = self.element_find(locator, True, True)511 if element is not None:512 return element.text513 return None514 def _is_text_present(self, text):515 text_norm = normalize('NFD', text)516 source_norm = normalize('NFD', self.get_source())517 return text_norm in source_norm518 def is_element_present(self, locator):519 application = self._current_application()520 elements = self.element_finder.find(application, locator, None)521 return len(elements) > 0522 def _is_visible(self, locator):523 element = self.element_find(locator, True, False)524 if element is not None:525 return element.is_displayed()...

Full Screen

Full Screen

lesson02-hw05.py

Source:lesson02-hw05.py Github

copy

Full Screen

1# Реализовать структуру «Рейтинг», представляющую собой набор натуральных чисел, который2# не возрастает. У пользователя нужно запрашивать новый элемент рейтинга. Если в рейтинге3# существуют элементы с одинаковыми значениями, то новый элемент с тем же значением4# должен разместиться после них.5# Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2.6# Пользователь ввёл число 3. Результат: 7, 5, 3, 3, 3, 2.7# Пользователь ввёл число 8. Результат: 8, 7, 5, 3, 3, 2.8# Пользователь ввёл число 1. Результат: 7, 5, 3, 3, 2, 1.9# Набор натуральных чисел можно задать сразу в коде, например, my_list = [7, 5, 3, 3, 2].10my_list = [8, 5, 4, 4, 2, 1, 1]11z = 012while z!=3:13 int_input = int(input("Введите натуральное число:"))14 if (int_input in my_list):15 ind = my_list.index(int_input) # определение номера индекса/позиции в list16 cnt = my_list.count(int_input) # определение количества одниковых позиции в list17 my_list.insert(ind + cnt - 1, int_input) # добавление в список18 print(my_list)1920 # for i in my_list:21 # if i == int_input:22 # print(int_input)2324 else: # Элемента в списке нет25 # поиск элементов рядом в большую сторону26 result = any(ele > int_input for ele in my_list)27 if result == True:28 element_find = False29 i = 030 while element_find == False: # поиск элемента рядом в большую сторону31 i += 132 element_find = int_input + i in my_list # поиск элемента # any(ele == int_input + i for ele in my_list)3334 if element_find == True:35 element_find_index = my_list.index(int_input + i)36 cnt = my_list.count(int_input + i) # определение количества одниковых позиции в list37 my_list.insert(element_find_index + i + cnt - 1, int_input) # добавление в список38 print(my_list)39 else: # поиск элемента рядом в меньшую сторону если не нашли в большую сторону40 element_find = False41 i = 042 while element_find == False:43 i += 144 element_find = int_input - i in my_list45 if element_find == True:46 element_find_index = my_list.index(int_input - i) # поиск элемента47 cnt = my_list.count(int_input - i) # определение количества одниковых позиции в list48 my_list.insert(element_find_index, int_input) # добавление в список49 print(my_list) ...

Full Screen

Full Screen

20_element_search.py

Source:20_element_search.py Github

copy

Full Screen

1import random2# 1st method3def game(random_list, num):4 for i in random_list:5 if i == num:6 return True7 return False8random_list = sorted(random.sample(range(1, 20), 10))9print(random_list)10num = random.randint(1, 20)11print(num)12print(game(random_list, num))13# 2nd method14def find(sorted_list, element_find):15 min_ind = 116 max_ind = len(sorted_list)-117 while True:18 mid_ind = (max_ind - min_ind) / 219 mid_ele = sorted_list[mid_ind]20 for i in sorted_list:21 if i != element_find:22 return False23 if mid_ind < min_ind or mid_ind > max_ind or mid_ind < 0:24 return False25 if mid_ele == element_find:26 return True27 elif element_find > mid_ele:28 mid_ind = max_ind29 else:30 mid_ind = min_ind31sorted_list = sorted(random.sample(range(1, 30), 15))32print(sorted_list)33element_find = random.randint(1, 30)34print(element_find)...

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 Robotframework-anywherelibrary 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