Как определить и отправить текст в элемент в iframe? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь написать 'eureka' в поле, и Selenium всегда вызывает одну и ту же ошибку: NoSuchElementException

Это поле, в котором я пытаюсь получить данные:

<input type="text" class="standardTextField" id="rulesFilternameValue" name="rulesFilternameValue" onclick="if(typeof event !== 'undefined' &amp;&amp; event != null) {event.cancelBubble=true;}if(typeof event !== 'undefined' &amp;&amp; event != null) {event.cancelBubble=true;}" onkeypress="if (event.keyCode === 13){event.preventDefault();handleFilterRequest('rulelist', 'FILTER')}">

Я уже пробовал с find_element_by_id, find_element_by_class, find_element_by_xpath и ничего.

Все это внутри iFrame:

<iframe id="mainwindow" name="mainwindow" style="top: 54px; height: 849px;" 
src="/h2/welcomeAction.do?misc=1582634309181" frameborder="0"></iframe>

, но событие find_element_by_id ('mainwindow' ') не удается * *

1 Ответ

1 голос
/ 25 февраля 2020

Поскольку требуемый элемент находится в пределах <iframe>, поэтому для вызова click() на элементе необходимо:

  • Ввести WebDriverWait для требуемого рамка должна быть доступна и переключиться на нее .
  • Индуцировать WebDriverWait , чтобы требуемый элемент был активным для клика .
  • Вы можно использовать следующее решение:

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

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#mainwindow[name='mainwindow']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.standardTextField#rulesFilternameValue"))).send_keys("eureka")
      
    • Использование XPATH:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='mainwindow' and @name='mainwindow']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='standardTextField' and @id='rulesFilternameValue']"))).send_keys("eureka")
      
    • Примечание : необходимо добавить следующий импорт:

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

Ссылка

Вы можете найти пару соответствующих обсуждений в:

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