2010-05-02 2 views
1

Voici l'affaire:Comment puis-je rechercher un texte et remplir/cliquer sur un lien avec Selenium?

Existe-t-il un moyen de rechercher un nom d'entrée ou un type qui n'est pas précis et de le remplir? Par exemple, je veux remplir n'importe quelle entrée avec le nom email avec mon email, mais j'ai peut-être quelques entrées nommées email-123, emailemails, emails etc ... Y at-il un moyen de faire quelque chose comme * email * ?

Et comment puis-je cliquer sur un lien pour vérifier un texte qui pourrait être sur le lien, ou au-dessus du lien, ou fermer, ou à la classe etc?

ps: J'utilise ide sélénium avec FireFox

Répondre

2

Vous pouvez utiliser XPath pour trouver quelque chose comme //input[contains(@name,'email'). Si vous avez plusieurs instances comme ça sur la page il sera utile de passer votre test à votre langage de programmation préféré et faire ensuite

emailInstances = sel.get_xpath_count("//input[contains(@name,'email')]") 
for i in range(int(emailInstances)): 
    sel.type("//input[contains(@name,'email')]["+ i + 1 +"]","[email protected]") 
0

Xpath fonctionne bien et la solution ci-dessus est bon. Si vous essayez de tester d'anciennes versions d'Internet Explorer, vous pouvez également utiliser l'injection JavaScript. Je trouve que c'est très rapide, mais peut être un peu plus délicat à déboguer. Je n'ai pas vérifié en fait, si les travaux ci-dessous, mais nous espérons qu'il vous donne une idée de ce que vous pouvez faire:

String javaScript = "_sl_enterEmailStr = function(parentObj,str) {  "+ 
      "  var allTags = parentObj.getElementsByTagName('input'); "+ 
      "  for (var i = 0; i < allTags.length; ++i) {    "+ 
      "   var tag = allTags[i];         "+ 
      "   if (tag.name && tag.type && tag.type === 'text'  "+ 
      "    && tag.name.match(/email/)) {      "+ 
      "    tag.value = str;         "+ 
      "   }              "+ 
      "  }               "+ 
      "};                "+ 
      "_sl_enterEmailStr(this.browserbot.getCurrentWindow().document "+ 
      "     ,'[email protected]');     "; 


    mySelenium.getEval(javaScript); 

Je trouve injection JavaScript avec des expressions régulières me permet de faire de grandes choses à des champs d'entrée dynamiques. Notez que vous pouvez utiliser findElement() pour être plus précis sur l'emplacement des balises. En ce qui concerne le fait de cliquer sur un lien et d'obtenir du texte, ce sont de simples opérations click() et getText() qui peuvent être effectuées avec le locator approprié. Je voudrais vérifier l'API de sélénium. par exemple, voici le lien vers le Java one for 1.0b2.

Questions connexes