Проблема с расположением ссылки в Selenium / python - PullRequest
1 голос
/ 16 апреля 2020

У меня проблема. Я хочу нажать Zadanie 1, используя Selenium здесь:

https://buggy-testingcup.pgs-soft.com/

Я пробовал xpath, частичные ссылки, текст ссылки и так далее, но все время У меня ошибка

Message: no such element: Unable to locate element:  {"method":"xpath","selector":"/html/body/div/div/div/div[2]/div[1]/a/h2"}

Message: no such element: Unable to locate element: {"method":"partial link text","selector":"Zadanie 1"}

Как мне найти эту ссылку?

<a href="/task_1">
  <h2>Zadanie 1</h2>
</a>

Это странно для меня, потому что когда я запускаю код @ 0m3r, это работает. но когда я вставляю его в свой проект, я получаю ошибки.

import unittest
import time
import HtmlTestRunner
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from ASTA.Pages.HomePage import ASTA_homepage


class test_task1(unittest.TestCase):

    @classmethod
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def test_open_task(self):
        driver = self.driver
        driver.get("https://asta.pgs-soft.com/")

        open_app = ASTA_homepage(driver)
        open_app.open_buggy_app()
        time.sleep(3)
        open_app.open_task1()

    @classmethod
    def tearDown(self):
        self.driver.close()


if __name__ == "__main__":
    unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='C:/Users/Warpath/PycharmProjects/allegro_tests/venv/ASTA'))



class ASTA_homepage():

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

    def open_buggy_app(self):
        self.driver.find_element_by_partial_link_text("Buggy app").click()

    def open_task1(self):

        link = self.driver.find_element_by_link_text("Zadanie 1")
        link.click()

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Найти по тексту ссылки

Пример

import time    
from selenium import webdriver

chrome_browser = webdriver.Chrome()
url = "https://buggy-testingcup.pgs-soft.com/"

chrome_browser.get(url)
time.sleep(3)

link = chrome_browser.find_element_by_link_text("Zadanie 1")
link.click()
0 голосов
/ 16 апреля 2020

Я смог нажать на эту кнопку, используя это ниже. Кроме того, всегда полезно использовать ожидания при попытке найти элементы или взаимодействовать с ними.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

# You will need to use the path for your driver
driver = webdriver.Chrome('/Users/Shared/Drivers/chromedriver')

driver.get('https://buggy-testingcup.pgs-soft.com/')

button = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '[href=\"\/task_1\"]')))

button.click()

Более подробную информацию об использовании ожиданий можно найти здесь: https://selenium-python.readthedocs.io/waits.html

0 голосов
/ 16 апреля 2020

Попробуйте использовать метод Selenium, отличный от find_element_by_xpath. Вы можете найти элементы xpath, jspath, inner HTML, et c

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

Это доступные методы, которые позволяет Selenium.

У меня есть приложение для заполнения форм, где каждый элемент может быть найден по имени, но по какой-то причине один из них должен быть найден исключительно xpath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...