Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

xpath
page-object
python
webdriver
Теги: #<Tag:0x00007f7b634801d0> #<Tag:0x00007f7b63480090> #<Tag:0x00007f7b63487f48> #<Tag:0x00007f7b63487de0>

#1

при использовании 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?


(Maxim Andryushchenkov) #2

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


#3
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()

#4

код теста:


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()

(Maxim Andryushchenkov) #5

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


(Sergey Ivanskoy) #6

вставьте 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()


#7

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


(Sergei Chipiga) #8

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


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

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


(Kosmos) #10

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

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