So wählen Sie ein HTML-Element in Selenium aus, unabhängig davon, in welchem ​​Frame es sich befindet
P粉073857911
P粉073857911 2024-02-26 11:11:52
0
2
438

Ich versuche, ein Element auszuwählen, das sich in einem Iframe befindet und sich möglicherweise in anderen Iframes befindet.

Ist es möglich, ein Element innerhalb eines (untergeordneten) Iframes in (Python) Selenium auszuwählen, ohne zuerst den Iframe auszuwählen? Gibt es eine Möglichkeit, jeden Iframe irgendwie zu „schleifen“ und zu überprüfen, wo mein Element zu finden ist ...?

Wie mache ich das, wenn das Element, der HTML-Inhalt und der Iframe möglicherweise gerade erst geladen wurden ...?

P粉073857911
P粉073857911

Antworte allen(2)
P粉571233520

编写自己的递归查找器应该很容易。抱歉,我不懂 python,但在 Java 中它会是这样的:

public void findInAllFrames(WebElement e, String targetIdStr) {

    List l = e.findElements(By.tagName("iframe"));

    for(int inx=0; inx targets = l.get(inx).findElements(By.id(targetIdStr));
        if(targets.size()>0) {
            // Do something with your targets
        }

        findInAllFrames(l.get(inx), targetIdStr);
    }
}
P粉794851975

,无法通过 Selenium,无需切换到相应的 iframe

原因:

加载页面时,Selenium 的焦点默认保留在顶部窗口上。 顶部窗口包含其他<iframes>框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的 <iframe>


帧切换方法:

我们可以通过3种方式切换到框架。

按框架名称

Name iframe 的属性,通过它我们可以切换到它。

示例:

driver.switch_to.frame("iframe_name")

按帧 ID

iframe的ID属性,通过它我们可以切换到它。

示例:

driver.switch_to.frame("iframe_id")

按帧索引

假设页面有10个frame,我们可以通过索引切换到iframe。

示例:

driver.switch_to.frame(0)
driver.switch_to.frame(1)

切换回主机

我们可以使用default_content()parent_frame()切换回主框架

示例:

driver.switch_to.default_content()
driver.switch_to.parent_frame()

切换框架的更好方法:

切换框架的更好方法是通过将 expected_conditions 设置为 frame_to_be_available_and_switch_to_it 来诱导 WebDriverWait 以获得预期框架的可用性,如下所示:

  • 通过帧 ID

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
  • 通过框架名称

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))
  • 通过框架Xpath

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))
  • 通过框架CSS

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))

参考

您可以在以下位置找到相关的详细讨论:

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage