簡體   English   中英

如何使用Selenium WebDriver訪問動態添加的iframe?

[英]How do I access a dynamically added iframe using Selenium WebDriver?

我有一個沒有iframe的頁面,然后通過JavaScript在點擊一個錨點后添加一個iframe。

我遇到的問題是,當使用driver.switch_to_frame(x)切換到幀時,我仍然可以找到我的任何內容。

我已經嘗試循環遍歷使用driver.find_elements_by_tag_name('iframe')找到的幀,並檢查每個幀我期望找到的類,但沒有這樣的運氣。

driver.switch_to_active_element()也沒有給我正確的iframe。

我不確定iframe內容是否只是無法訪問,因為JS DOM更改未反映在Selenium從驅動程序中看到的內容中。 我已經為其他iframe完成了同樣的過程而沒有任何問題,但是這個只是不合作。 以下是我正在處理的簡化版本。

在JS之前:

<html>
    <body>
      <a onclick="jsmagic">load iframe</a>
    </body>
</html>

JS之后:

<html>
    <body>
      <iframe><div class='modal'>Message</div></iframe>
      <a onclick="jsmagic">load iframe</a>
    </body>
</html>

Python WebDriver嘗試:

driver.switch_to_frame(0)
driver.find_elements_by_class_name('modal')
driver.switch_to_default_content()

我也嘗試了類似的變體:

frame = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to_frame(frame)
driver.find_elements_by_class_name('modal')

我曾嘗試使用driver.execute_script來訪問該對象,但獲取內容超出了我的范圍。 Firefox控制台命令無法通過Selenium運行。

這似乎是一個時間問題,我最終得到了以下幾點:

def modal_must_show(self, string):
  for _ in range(12):
    for frame in self.driver.find_elements_by_tag_name('iframe'):
      try:
        if not frame.is_displayed():
          continue
        if frame.parent.page_source.find(string):
          return
      except:
        pass
  assert False, 'Modal missing string'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM