在Selenium Python中切换到iframe后无法找到元素

时间:2019-12-24 06:23:53

标签: python selenium selenium-webdriver iframe

我正在运行一个测试用例,其中一部分是检查iframe中的元素是否可见 我已经完成了以下操作,但是它不起作用,并且总是转到except块。谢谢

try:
    time.sleep(2)
    driver.switch_to.frame("iframe-xxxxxxxxxxxxxxxxxx")
    time.sleep(2)
    if driver.find_element_by_xpath("//div[@class='col-11 answer-feedback-label']//div[contains(text(),'Hello World!')]"):
        logging.info("Success")
except:
     logging.error("Failure")

1 个答案:

答案 0 :(得分:0)

要检查<iframe>中的某个元素是否可见,因为所需元素位于<iframe>中,因此您必须:

  • 为所需的frame_to_be_available_and_switch_to_it()诱导 WebDriverWait
  • visibility_of_element_located()生成 WebDriverWait
  • 您可以使用以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      import org.openqa.selenium.TimeoutException;
      .
      .
      .
      try:
      
          WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_XPATH")))
          WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='col-11 answer-feedback-label']//div[contains(text(),'Hello World!')]")))
          logging.info("Success")
      except TimeoutEception:
           logging.error("Failure")
      
  

在这里您可以找到有关Ways to deal with #document under iframe的相关讨论