Heim  >  Fragen und Antworten  >  Hauptteil

So wählen Sie ein HTML-Element in Selenium aus, unabhängig davon, in welchem ​​Frame es sich befindet

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粉073857911P粉073857911235 Tage vor334

Antworte allen(2)Ich werde antworten

  • P粉571233520

    P粉5712335202024-02-27 10:09:53

    编写自己的递归查找器应该很容易。抱歉,我不懂 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);
        }
    }

    Antwort
    0
  • P粉794851975

    P粉7948519752024-02-27 10:03:34

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

    原因:

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


    帧切换方法:

    我们可以通过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")))

    参考

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

    Antwort
    0
  • StornierenAntwort