Невозможно найти элемент внутри iframe через Selenium - PullRequest
0 голосов
/ 11 октября 2018

Я новичок в Selenium.Я пытаюсь написать скрипт Python, который будет входить в конкретную форму.Форма расположена по адресу http://www.tvta.ca/securedContent

Код, который я запускаю:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://tvta.ca/securedContent/")
elem = driver.find_element_by_name("txtUserName")
elem.clear()
elem.send_keys("<<my email>>")

Я получаю сообщение об ошибке:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="txtUserName"]

Яне уверен, что мне здесь не хватает?Я проверил источник веб-страницы, поле входа в систему определенно называется txtUserName.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вам нужно переключиться на фрейм, чтобы написать текст в текстовом поле, попробуйте проверить синтаксис один раз, так как у меня меньше хорошего в Python

framLogin= driver.find_element_by_id("membeeLoginIF")
driver.switch_to.frame(framLogin)
EmailTxt = driver.find_element_by_name("txtUserName");
EmailTxt.send_Keys("Test@gmail.com");

То же самое в Java

WebElement framLogin= driver.findElement(By.id("membeeLoginIF"));
driver.switchTo().frame(framLogin);
WebElement EmailTxt = driver.findElement(By.name("txtUserName"));
EmailTxt.sendKeys("Test@gmail.com");
0 голосов
/ 11 октября 2018

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

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

    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"membeeLoginIF")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.textboxWaterMark#txtUserName"))).send_keys("Jeff")
    
  • Вы должны добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 11 октября 2018

Этот сайт требует, чтобы сторонние куки были включены;без них форма логина не загружается.Вероятно, ваш браузер настроен таким образом, но значения по умолчанию для webdriver.Firefox нет.

Чтобы увидеть, что на самом деле видит Selenium, сбросьте driver.page_source и / или сделайте снимок экрана с driver.save_screenshot(...). * 1006.*

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