при использовании page object pattern selenium не находит элемент. Без него - находит.

при использовании page object pattern selenium не находит элемент. Без него - находит.

если в тесте прописываю напрямую:
_signin_link = "(//a[@href='/auth/login'])[3]"
self.driver.find_element(By.XPATH, signin_link).click()

элемент находится и клик происходит.

Если пишу через Page Object Pattern этот локатор и метод в классе страницы, а в тесте вызываю метод, то выдаёт selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"(//a[@href='/auth/login'])[3]"}

почему так может быть?
Any ideas?

Ну а вторую часть кода через POP дадите? Как можно дать совет по вашей неполной инфе?

from selenium.webdriver.common.by import By

class KnowledgeRepoPage:

def  __init__ (self, driver):
self.driver = driver

“”" locators “”"

_signin_link = “(//a[@href=’/auth/login’])[3]”

def click_signin(self):
self.driver.find_element(By.XPATH, self._signin_link).click()

код теста:


import os
import time
import unittest

from selenium.webdriver.common.by import By

from base.baseclass import BaseClass
from pages.knowledge_repo_page import KnowledgeRepoPage

class KnowledgeRepoTesting(unittest.TestCase):

bc = BaseClass()

def test_knowledge_repo(self):

self.driver = self.bc.open_browser_local(“chrome”)
self.kr = KnowledgeRepoPage(self.driver)
self.bc.open_knowledge_repo()
time.sleep(2)
self.kr.click_signin()

Вставьте код с нормальными отступами

3 лайка

вставьте self в init’e перед инициализацией _signing_link

def init(self, driver):
    self.driver = driver
    self._signin_link = “(//a[@href=’/auth/login’])[3]”

def click_signin(self):
    self.driver.find_element(By.XPATH, self._signin_link).click()

спасибо за совет!
попробовал, не помогло, все равно “selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:”(//a[@href=’/auth/login’])[3]"}"

Вы бы весь код тестов расшарили, а то непонятно, что внутри методов страницы реализовано.

"(//a[@href='/auth/login'])[3]"

попробуйте привести в порядок ковычки, мне кажется проблема может быть в них
из-за своеобразного форматирования цитат - не понятно, какие именно используются

Каким образом подгружается тег a с ссылкой /auth/login? (сразу, через ajax, используя reactjs, …)

P.S. Так же попробуйте еще раз вызвать init перед кликом и посмотреть результат.