Невозможно найти элемент в форме, используя Selenium и Python3 - PullRequest
0 голосов
/ 01 марта 2019

Я не могу ввести текст в текстовое поле Номер бронирования в: https://www.hmm21.com/cms/business/hongkong/export/vgmWithoutLogin/index.jsp

Это HTML-код текстового поля, использующий проверку на Chrome:

<input style="width:200px;text-transform:uppercase;ime-mode:disabled;" type="text" maxlength="12" name="bookingNumber" value="">

Это кодЯ сейчас использую:

element = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='bookingNumber']"))).send_keys('test')

Я пробовал и многие другие методы, такие как выбор с помощью CSS Selector, absolute xpath, но я просто не могу ничего вводить в текстовое поле.

Я также протестировал xpaths и CSS Selector, используя ChroPath, несколько других расширений chrome, а также xPath Finder на Firefox, и все они, похоже, работают.

Буду признателен, если кто-нибудь сможетПомогите.Спасибо.

Ответы [ 4 ]

0 голосов
/ 22 апреля 2019

Этот элемент находится внутри iframe, как предложил ChroPath.Поэтому сначала вам нужно переключиться на iframe и выполнить действие.Иногда, если sendKeys не работает в поле ввода, попробуйте метод clear / click () перед отправкой ключей в поле.

enter image description here

0 голосов
/ 01 марта 2019

Сначала вы должны переключить iframe, используйте

WebDriverWait(self.driver, 10).until(EC.frame_to_be_available_and_switch_to_it(self.driver.find_element_by_id('_frame1')))

Поскольку элемент ввода текстового поля «Номер бронирования» находится в новом iframe с именем «_frame1».

Надеюсь, он вам поможет.

0 голосов
/ 01 марта 2019

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

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

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

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#_frame1[src='/ebiz/ebooking/vgm/indexWithoutlogin.jsp']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='bookingNumber']"))).send_keys('Rong Heng')
      
    • ИспользованиеXPATH:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='_frame1' and @src='/ebiz/ebooking/vgm/indexWithoutlogin.jsp']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='bookingNumber']"))).send_keys('Rong Heng')
      

Здесь вы можете найти соответствующее обсуждение по Способы работы с #document в iframe

0 голосов
/ 01 марта 2019

Попробуйте щелкнуть элемент перед отправкой ключей. Вы также можете извинить JavaScript, чтобы изменить его значение.

.click()

Кроме того, если вход отображается через JavaScript, подождите, пока элемент будет присутствовать и не будет кликать.

.presence_of_element_located()
...