Невозможно щелкнуть элемент в селене, но оба пути css и xpath являются допустимыми - PullRequest
0 голосов
/ 06 января 2020

Я не могу щелкнуть этот элемент, пробовал CSS селектор и Xpaths. Может кто-нибудь помочь, продолжать получать недействительный селектор, XPath / не может найти элемент. Тем не менее, когда я использую инспектор для проверки правильности этих элементов, почему мой скрипт веб-драйвера не может их найти?

HTML:

<div class="ap-ba-well-button"> 
    <!-- ngIf: service.booking_status_type !== 'Not Bookable Online' -->
    <button ng-if="service.booking_status_type !== 'Not Bookable Online'" class="ap-button ng-binding ng-scope">Book</button>
    <!-- end ngIf: service.booking_status_type !== 'Not Bookable Online' --> 
    <!-- ngIf: service.booking_status_type === 'Not Bookable Online' --> 
</div>

Кодовые испытания:

driver.find_element(By.CSS_SELECTOR, ".ap-popover-well-group-single:nth-child(1) .ap-button").click()
driver.find_element_by_xpath(“//?/button[@innertext='Book']”) 
driver.find_element_by_xpath(“/html//span[@class='ng-scope']/ap-booking-app[@class='ng-scope']/div[@class='ap-ba-wrapper ng-scope']/div[@class='ap-ba-container with-footer']//ap-booking-app-step-services[@data='data']/div/div[1]//div[@class='ap-ba-well-single ng-scope']//button[@class='ap-button ng-binding ng-scope']”)

любая помощь будет отличной

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Из предоставленных вами HTML и ваших тестов кода довольно очевидно, что этот элемент является элементом Angular, поэтому вы должны вызвать WebDriverWait для elementToBeClickable() и вам следующие Стратегии локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.ap-ba-well-button button.ap-button.ng-binding.ng-scope"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='ap-ba-well-button']//button[@class='ap-button ng-binding ng-scope' and text()='Book']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 06 января 2020

Индуцировать WebDriverWait () и element_to_be_clickable () и следующие параметры Xpath.

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Book']"))).click()

ИЛИ

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='ap-button ng-binding ng-scope' and text()='Book']"))).click()

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
0 голосов
/ 06 января 2020

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

Мой способ решения этой проблемы такой:

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

clickButton = WebDriverWait(browser,5).until(EC.element_to_be_clickable((By.XPATH, "ID")))
...