Maison  >  Questions et réponses  >  le corps du texte

Comment sélectionner un élément HTML dans Selenium, quel que soit le cadre dans lequel il se trouve

J'essaie de sélectionner un élément qui réside dans une iframe et peut résider dans d'autres iframes.

Est-il possible de sélectionner un élément dans une iframe (enfant) dans (python) Selenium sans sélectionner d'abord l'iframe ? Existe-t-il un moyen de "faire une boucle" dans chaque iframe et de vérifier où mon élément peut être trouvé... ?

Comment faire cela lorsque les éléments, le contenu html et l'iframe viennent peut-être d'être chargés... ?

P粉073857911P粉073857911235 Il y a quelques jours335

répondre à tous(2)je répondrai

  • P粉571233520

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

    Écrire votre propre chercheur récursif devrait être facile. Désolé, je ne connais pas Python, mais en Java, cela ressemblerait à ceci :

    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);
        }
    }

    répondre
    0
  • P粉794851975

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

    Non, impossible de passer le Sélénium, pas besoin de passer au iframe correspondant.

    Raison :

    Lors du chargement d'une page, le focus de Selenium reste par défaut sur la fenêtre supérieure. La fenêtre supérieure contient d'autres <iframes><iframes>框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的 <iframe> et framesets< /p>. Ainsi, lorsque nous devons interagir avec un


    WebElement

    à l'intérieur d'une iframe, nous devons passer au

    <iframe>

    correspondant via l'une des méthodes suivantes :

    Méthode de changement de cadre :

    Nous pouvons passer aux cadres de 3 manières.

    Par nom de monture

     :

    Name Propriété de l'iframe grâce à laquelle on peut y basculer.

    Exemple :

    driver.switch_to.frame("iframe_name")
    Par ID de cadre

     :

    L'attribut

    ID

    du iframe, grâce auquel nous pouvons y accéder.

    Exemple :

    driver.switch_to.frame("iframe_id")

    Index par image

     :

    Supposons que la page comporte 10 cadres, nous pouvons passer à l'iframe via l'index.

    Exemple :

    driver.switch_to.frame(0)
    driver.switch_to.frame(1)
    default_content()parent_frame()Revenir à l'hôte :

    Nous pouvons utiliser

    default_content()
    ou

    parent_frame()

    pour revenir au cadre principal

    Exemple : expected_conditions 设置为 frame_to_be_available_and_switch_to_it 来诱导 WebDriverWait

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

    Meilleure façon de changer de cadre :
    • Une meilleure façon de changer de frame est d'induire

      WebDriverWait en définissant expected_conditions

      sur
    • frame_to_be_available_and_switch_to_it
    • pour obtenir la disponibilité du prévu cadre , comme indiqué ci-dessous :

      Par
    • ID de cadre
    •  :

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))

      Par
    • nom du cadre
    •  :

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))

      Via
    • Framework Xpath
     :
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))

    Via

    Framework CSS
       :
    • WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))
    Référence🎜 🎜Vous pouvez trouver une discussion détaillée connexe sur : 🎜 🎜 🎜🎜Comment traiter un #document sous iframe🎜🎜 🎜

    répondre
    0
  • Annulerrépondre