2009-10-01 3 views
5

Nous avons un projet d'interface Web dans MVC et pour les tests automatisés, nous utilisons Selenium, c'est un outil génial. Mais je suis confronté à un problème en soulevant des événements avec Selenium.Selenium RC et les événements de contrôle d'entrée

Scénario: J'ai une zone de texte qui attend + valeur v et génère une erreur (javascript) lors de la saisie de toute valeur -ve et nous cliquons onglet de cette zone de texte ou cliqué à l'extérieur n'importe où sur la page.

Cela fonctionne très bien avec l'interaction normale de l'utilisateur avec le site Web, mais en utilisant sélénium, je ne suis pas capable d'obtenir ce comportement. Je mets du texte avec Selenium.Type ('elementId', - ve value) l'événement ne se déclenche pas et l'erreur ne monte pas.

J'ai essayé d'utiliser FireEvent ("textboxId", "flou") mais cela ne fonctionne pas. La seule solution de contournement est Focus sur la zone de texte, ajoutez de la valeur, utilisez FireEvent ("textbox", "flou") puis Focus sur une autre zone de texte.

Est-ce que quelqu'un a eu une idée pour résoudre ce problème?

Répondre

1

Votre solution de contournement ne semble pas être une mauvaise option. Lorsque vous vous concentrez sur le champ, puis changez le contenu et puis vous flou (se concentrer dans un autre domaine) est exactement la même interaction que l'utilisateur.

Une alternative différente (je préfère encore celle qui se concentre sur un autre champ) est d'utiliser getEval pour déclencher la fonction javascript qui valide le champ. Vous pouvez vérifier ce tutoriel sur la façon de le faire: http://www.theautomatedtester.co.uk/seleniumtraining/Selenium_JavaScript.htm

4

J'ai pu obtenir ce travail avec le client Java dans Selenium RC en appelant

    Type
  • ("id = textboxid", "newValue")

puis

  • fireEvent ("id = textboxid", "flou");

Avez-vous eu une quelconque indication quant à savoir si l'événement "flou" était déclenché? Je me demande si le localisateur n'a peut-être pas bien travaillé pour déclencher l'événement. Quels que soient les petits trucs que vous devez tirer pour que cela fonctionne, pour éviter cela pour tous les champs, vous devriez soit boucler vos appels 2-3 dans une fonction si vous utilisez un client RC, soit register some user extensions pour le faire en une seule étape si vous utilisez l'IDE Selenium.

0

"Flou" est une super trouvaille! Je vous remercie.

Mon problème était un peu différent. Voici comment j'ai utilisé "flou" pour une liste déroulante (parent) qui ne s'affichait pas pour remplir une seconde liste déroulante (enfant) (par exemple État et Comté).

  1. Selenium.Focus ("id = drpdwnState");
  2. Selenium.Select ("id = drpdwnState", "label = Michigan");
  3. Selenium.FireEvent ("id = drpdwnState", "flou");
  4. Selenium.Focus ("id = drpdwnCounty");
  5. Sélénium.Sélectionnez ("id = drpdwnCounty", "label = Grand Traverse");

Espérons que cela aide quelqu'un. À la votre!

Questions connexes