Невозможно найти элемент, используя ID и xpath - PullRequest
1 голос
/ 16 апреля 2020

У меня проблема с поиском кнопки.

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

Я хочу добавить 101 товар в корзину, используя кнопку «Dodaj», чтобы проверить, появляется ли предупреждение.

<div class="input-group input-group-sm">
     <span class="input-group-btn">
         <button id="add-product-5e9847b5ee071" class="btn btn-sm" role="button" data-add-to-basket="" data-product-price="15.54" data-product-name="Okulary">Dodaj</button>
     </span>
<input type="number" min="0" step="1" class="form-control" value="0" autocomplete="off">
</div>

Я пытался использовать xpath

add = self.driver.find_element_by_xpath('//*[@id="add-product-5e9847b5ee071"]')

, а также идентификатор "add-product-5e9847b5ee071", но я получаю сообщение:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="add-product-5e9847b5ee071"]"}

Может кто-нибудь объяснить мне что не так?

Ответы [ 2 ]

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

Чтобы нажать на первую кнопку Dodaj после ввода данных, вызовите

WebDriverWait () и дождитесь element_to_be_clickable () и следующего xpath.

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

driver=webdriver.Chrome()
driver.get("https://buggy-testingcup.pgs-soft.com/task_1")
inputtext=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"(//input[@class='form-control'])[1]")))
inputtext.clear()
inputtext.send_keys("101")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"(//button[text()='Dodaj'])[1]"))).click()

Еще одна опция xpath .

driver=webdriver.Chrome()
driver.get("https://buggy-testingcup.pgs-soft.com/task_1")
inputtext=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//h4[text()='Okulary']/following::input[1]")))
inputtext.clear()
inputtext.send_keys("101")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//h4[text()='Okulary']/following::button[1]"))).click()

Снимок браузера:

enter image description here

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

Обратите внимание, что, хотя каждая кнопка Dodaj продукта имеет уникальный идентификатор, который изменяется, все они имеют один и тот же атрибут data-product-name, который соответствует контейнеру. Например, для Piłka, если вы хотите кнопку Dodaj, вы можете использовать следующее

elem = driver.find_elements_by_xpath('//button[@data-product-name="Piłka"]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...