Does providing content to input-field inside iframe not possible using selenium?

Question:

i try to provide a value to an input-field on a website using the following code:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

if __name__ == '__main__':
  checkLink = "https://www.skatteetaten.no/person/avgifter/bil/eksportere/regn-ut/"

  os.environ['WDM_LOG'] = '0' 
  options = Options()
  options.add_argument("start-maximized")
  options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})    
  options.add_experimental_option("excludeSwitches", ["enable-automation"])
  options.add_experimental_option('excludeSwitches', ['enable-logging'])
  options.add_experimental_option('useAutomationExtension', False)
  options.add_argument('--disable-blink-features=AutomationControlled') 
  srv=Service()
  driver = webdriver.Chrome (service=srv, options=options)    
  waitWD = WebDriverWait (driver, 10)           

  driver.get (checkLink)       
  waitWD.until(EC.presence_of_element_located((By.XPATH,'//input[@id="Regnummer"]'))).send_keys("xyz")  
  
  driver.quit()

But i allways get a TimeoutException:

$ python test.py
Traceback (most recent call last):
  File "G:DEVFiverrTRYcsgoenterprisetest.py", line 29, in <module>
    waitWD.until(EC.presence_of_element_located((By.XPATH,'//input[@id="Regnummer"]'))).send_keys("xyz")  
  File "G:DEV.venvseleniumlibsite-packagesseleniumwebdriversupportwait.py", line 95, in until    
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace:

How can i put a value in this input-field?

Asked By: Rapid1898

||

Answers:

You element is present in iframe with id iFrameResizer0, so to type something in input, you should switch to iframe context first.

driver.get("https://www.skatteetaten.no/person/avgifter/bil/eksportere/regn-ut/")
driver.maximize_window()

waitWD = WebDriverWait(driver, 10)
waitWD.until(EC.frame_to_be_available_and_switch_to_it((By.ID, 'iFrameResizer0')))
input_field = waitWD.until(EC.presence_of_element_located((By.XPATH, '//input[@id="Regnummer"]'))).send_keys('xyz')
# switch back if you don't need to be left in iframe context
driver.switch_to.default_content()
Answered By: Yaroslavm
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.