При запукске выдает вот такую ошибку
При запуске выдает такую ошибку
return [element for element in elements if element.text.lower() == name][0]
E IndexError: list index out of range
@pytest.mark.usefixtures('setup')
class TestHomepage:
def test_foot_links(self):
footer_links = HomepageFooterLink(self.driver)
actual_Links = footer_links.get_fot_links_text()
expected_links = footer_links.FOOTER_LINK
assert expected_links == actual_Links, 'Validating Footer Links text'
footer_links.get_foot_link_by_name('Офисы и контакты').click()
time.sleep(5)
class HomepageFooterLink(SeleniumBase):
def __init__(self, driver):
super().__init__(driver)
self.driver = driver
self.__footerlinks: str = '#app > div > footer > div > div:nth-child(1) > div > div'
self.FOOTER_LINK = 'Офисы и контакты\nПолитика конфиденциальности\nПользовательское соглашение'
def get_footer_links(self) -> List[WebElement]:
return self.are_visible('css', self.__footerlinks, 'Footer Links')
def get_fot_links_text(self) -> str:
foot_links = self.get_footer_links()
foot_links_text = self.get_text_from_webelements(foot_links)
return Utils.join_strings(foot_links_text)
def get_foot_link_by_name(self, name: str) -> WebElement:
elements = self.get_footer_links()
return self.get_element_by_text(elements, name)
class SeleniumBase:
def __init__(self, driver):
self.driver = driver
self.__wait = WebDriverWait(driver, 15, 0.3)
def __get_selenium_by(self, find_by: str) -> dict:
find_by = find_by.lower()
locating = {'css': By.CSS_SELECTOR,
'xpath': By.XPATH,
'class_name': By.CLASS_NAME,
'id': By.ID,
'link_text': By.LINK_TEXT,
'name': By.NAME,
'partial_link_text': By.PARTIAL_LINK_TEXT,
'tag_name': By.TAG_NAME}
return locating[find_by]
def is_visible(self, find_by: str, locator: str, locator_name: str = None) -> WebElement:
return self.__wait.until(ec.visibility_of_element_located((self.__get_selenium_by(find_by), locator)), locator_name)
def is_present(self, find_by: str, locator: str, locator_name: str = None) -> WebElement:
return self.__wait.until(ec.presence_of_element_located((self.__get_selenium_by(find_by), locator)), locator_name)
def is_not_present(self, find_by: str, locator: str, locator_name: str = None) -> WebElement:
return self.__wait.until(ec.invisibility_of_element_located((self.__get_selenium_by(find_by), locator)),
locator_name)
def are_visible(self, find_by: str, locator: str, locator_name: str = None) -> List[WebElement]:
return self.__wait.until(ec.visibility_of_all_elements_located((self.__get_selenium_by(find_by), locator)), locator_name)
def are_present(self, find_by: str, locator: str, locator_name: str = None) -> List[WebElement]:
return self.__wait.until(ec.presence_of_all_elements_located((self.__get_selenium_by(find_by), locator)),
locator_name)
def get_text_from_webelements(self, elements: List[WebElement]) -> List[str]:
return [element.text for element in elements]
def get_element_by_text(self, elements: List[WebElement], name: str) -> WebElement:
name = name.lower()
return [element for element in elements if element.text.lower() == name][0]