web-dev-qa-db-fra.com

fonction de commutation de trames en python, sélénium

Je recherche une fonction qui facilite le basculement entre deux images. À l'heure actuelle, chaque fois que je dois basculer entre les images, je le fais par le code suivant:

driver.switch_to.frame(driver.find_element_by_css_selector("frame[name='nav']"))

driver.switch_to.frame(driver.find_element_by_css_selector("frame[name='content']"))

Mon objectif est d'obtenir une fonction qui prend un argument juste pour changer la navigation ou le contenu car le reste est fondamentalement le même.

Ce que j'ai déjà essayé c'est:

def frame_switch(content_or_nav):
x = str(frame[name=str(content_or_nav)] #"frame[name='content_or_nav']"
driver.switch_to.frame(driver.find_element_by_css_selector(x))

Mais ça me donne une erreur

 x = str(frame[name=str(content_or_nav)]
                  ^

ErreurDeSyntaxe: Syntaxe invalide

14
Andigger

La façon dont cela est écrit, il essaie d'analyser le code CSS en tant que Python. Vous ne voulez pas cela.

Cette fonction convient:

def frame_switch(css_selector):
  driver.switch_to.frame(driver.find_element_by_css_selector(css_selector))

Si vous essayez simplement de basculer vers le cadre en fonction de l'attribut name, vous pouvez utiliser ceci:

def frame_switch(name):
  driver.switch_to.frame(driver.find_element_by_name(name))

Pour revenir à la fenêtre principale, vous pouvez utiliser

driver.switch_to.default_content()
35
ddavison