Comment sélectionner un élément HTML dans Selenium, quel que soit le cadre dans lequel il se trouve
P粉073857911
P粉073857911 2024-02-26 11:11:52
0
2
436

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粉073857911
P粉073857911

répondre à tous(2)
P粉571233520

É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);
    }
}
P粉794851975

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. 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🎜🎜 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal