Поиск элементов с помощью селектора CSS с помощью ChromeDriver (Selenium) в Python - PullRequest
0 голосов
/ 11 мая 2018

Я использую ChromeDriver из Selenium с Python и пытаюсь найти на своей странице кнопку со следующим HTML:

<input id="j_id0:SiteTemplate:j_id255:new" type="submit" name="j_id0:SiteTemplate:j_id255:new" value="New" class="kbutton-white">

Единственное, что я знаю, что это константа - это id иимя оканчивается на «новый», и я пытаюсь использовать следующий код для идентификации и щелчка по этому элементу:

test_runner.driver.find_element_by_css_selector('[id*=new]').click()

Тем не менее, я получаю эту ошибку при запуске кода:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id*=new]"}

В чем здесь моя ошибка?

Обновление: этот элемент был внутри iframe, и мне пришлось переключиться на iframe, прежде чем пытаться найти этот элемент.Пожалуйста, смотрите комментарии для ответа.

1 Ответ

0 голосов
/ 11 мая 2018

В соответствии с HTML, которым вы поделились, чтобы вызвать click() для желаемого элемента, вы можете использовать следующее css_selector:

driver.find_element_by_css_selector("input.kbutton-white[id$='new'][name$='new'][value='New']").click()

Объяснение:

  • .kbutton-white: атрибут class .
  • id$='new': id атрибут заканчивается на new
  • name$='new': атрибут name оканчивается на new
  • value='New': атрибут value .

Но кажется, что элемент является динамическим, поэтому вам может потребоваться вызвать WebDriverWait следующим образом:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.kbutton-white[id$='new'][name$='new'][value='New']"))).click()
...