Forum Discussion
* i don't know exactly what you want but i've made the following method to search by Xpath query inside web page.
/** * <a id="web.findItWeb"></a> * Rechercher des objets via requête XPath sur une page web<br> * <br> * <font color=Red><i><b>Limitations<br> * - limitation technique, TestComplete ne gère que les requêtes XPath 1.0</b></i></font> * @function * @param {string} Property - Nom de la propriété à rechercher * @param {variant} Value - Valeur de la propriété à rechercher * @param {string} [Type=*] - Type de l'objet (<i>SELECT</i>, <i>INPUT</i>, <i>DIV</i>, etc..) pour réduire le champ de recherche * @param {object} [Page=current page] - Page/élément web à rechercher dedans * @param {number} [Timeout=0] - Si <b>>0</b> alors répéter la recherche pendant <i>Timeout</i> millisecondes * @param {boolean} [Refresh=false] - <b>true</b> alors rafraichir la page avant de faire la recherche * @param {boolean} [Parent=false] - <b>true</b> alors renvoyer l'objet parent de celui recherché * @param {boolean} [Partial=false] - <b>true</b> alors recherche sur <i>Property contient Value</i> et non pas <i>Property = Value</i> * @returns {object} Renvoie un <b>objet web TestComplete</b> si il a été trouvé ou <b>null</b> s'il n'a pas été trouvé */ qa.web.findItWeb = function (Property, Value, Type, MyPage, Timeout, Refresh, Parent, Partial) { if ((Property == undefined) || (Value == undefined)) { if (qa.system.findDebug) { Log.Warning('Appel de qa.web.findItWeb() avec un paramètre obligatoire non renseigné (Property ou Value)'); } return null; } MyPage = qa.system.checkUndefined(MyPage, Sys.Browser().Page('*')); Type = qa.system.checkUndefined(Type, "*"); Refresh = qa.system.checkUndefined(Refresh); Parent = qa.system.checkUndefined(Parent); Partial = qa.system.checkUndefined(Partial); Timeout = qa.system.checkUndefined(Timeout, 0); var toFind; if (qa.system.findDebug) { var TimeoutStr = (Timeout == 0 ? 'no time out' : Timeout.toString()); Log.Message('qa.web.findItWeb(' + Property.toString() + ', ' + Value.toString() + ', ' + Type.toString() + ', [MyPage], ' + TimeoutStr + ', ' + Refresh.toString() + ', ' + Parent + ', ' + Partial + ')'); } if (Partial) { toFind = "//" + Type + "[contains(@" + Property + ', "' + Value + '")]'; } else { toFind = "//" + Type + "[@" + Property + ' ="' + Value + '"]'; } if (Parent) { toFind = toFind + '/..'; } var objectfind; try { if (Timeout == 0) { if (Refresh) { MyPage.Refresh(); } objectfind = MyPage.EvaluateXPath(toFind); if (objectfind != null) { objectfind = (new VBArray(objectfind)).toArray(); } } else { var finding = false; var chrono = HISUtils.StopWatch; chrono.Start(); while ((!finding) && (chrono.Split() < Timeout)) { if (Refresh) { MyPage.Refresh(); } objectfind = MyPage.EvaluateXPath(toFind); if (objectfind != null) { objectfind = (new VBArray(objectfind)).toArray(); finding = objectfind.Exists; } } } } catch(e) { objectfind = null; } finally { if (qa.system.findDebug) { if ((objectfind == undefined) || (objectfind == null)) { Log.Message('qa.web.findItWeb() renvoie un objet null ou undefined'); } else { Log.Message('qa.web.findItWeb() a trouvé un objet'); } } return objectfind; } };
Adapt it to your code (here it's a method part of my framework namespace qa.web so method signature is quite unusual)
For example to search a DIV item by it's html class (webobject could be the Sys.Browser('*').Page('*') or an object of a page):
item = qa.web.findItWeb('class', 'name_of_the_class_to_look_for', 'DIV', webobject;
Or searching a SELECT item by it's html name:
var Page = Sys.Browser().Page(_SHRoute);
var TypeRoute = qa.web.findItWeb("name", "name_to_look_for", "SELECT", Page);
TypeRoute[0].ClickItem(_SHRessources[pRouteType]);
Or searching an INPUT item ...
var FileRoute = qa.web.findItWeb("name", "name_to_look_for", "INPUT", Page);
Or searching an item only by it's id on the current page ...
var ItemToFind = qa.web.findItWeb("id", "id_to_look_for");
* To set text to an input i've made the following method, i let you dig inside a little and try it and if you still need help tell me.
/** * <a id="web.setTextInput"></a> * Saisir un texte dans un champ de saisie d'un objet web * @function * @param {Object} TextInput - Objet web contenant une propriété texte acceptant la saisie * @param {string} Value - Texte à saisir * @param {boolean} [Validate=false] - <b>true</b> alors appuyer sur <i>ENTREE</i> après saisie * @param {string} [PropertyName=caption] - Nom de la propriété de <i>TextInput</i> à utiliser * @param {boolean} [Force=false] - <b>true</b> alors saisir et ignorer le contrôle de la valeur saisie * @param {boolean} [Autocomplete=false] - <b>true</b> alors vérifier à chaque saisie de caractère si par autocomplete la valeur du champ est bien renseignée (incompatible avec le paramètre <i>Force</i>) * @returns {boolean} <b>true</b> si l'opération s'est bien déroulée et, si <i>Force</i> est à <b>false</b>, que la valeur demandée est bien saisie */ qa.web.setTextInput = function (TextInput, Value, Validate, PropertyName, Force, Autocomplete) { if ((TextInput == undefined) || (TextInput == null)) { return false; } Validate = qa.system.checkUndefined(Validate); PropertyName = qa.system.checkUndefined(PropertyName, 'caption'); Force = qa.system.checkUndefined(Force); Autocomplete = qa.system.checkUndefined(Autocomplete); var resultat = true; try { if (Force) { TextInput.Click(); TextInput.Keys('^a'); TextInput.Keys('[Del]'); TextInput.Keys(Value); if (Validate) { TextInput.Keys('[Enter]'); } } else { var i = 0; if (Autocomplete) { var j; while ((!(TextInput.WaitProperty(PropertyName, Value, qa.system.time.micro))) && (i<10)) { TextInput.Click(); TextInput.Keys('^a'); TextInput.Keys('[Del]'); var tableau=Value.split(""); for (var j=0; j<tableau.length; j++) { TextInput.Click(); TextInput.Keys(tableau[j]); aqUtils.Delay(qa.system.time.smaller, 'Autocomplete text input'); if (TextInput.WaitProperty(PropertyName, Value, qa.system.time.micro)) { break; } } i++; } } else { while ((!(TextInput.WaitProperty(PropertyName, Value, qa.system.time.micro))) && (i<10)) { TextInput.Click(); TextInput.Keys('^a'); TextInput.Keys('[Del]'); TextInput.Keys(Value); i++; } } if (TextInput.WaitProperty(PropertyName, Value, 0)) { if (Validate) { TextInput.Keys('[Enter]'); } } else { resultat = false; } } } catch(e) { resultat = false; } return resultat; };
- hhagay9 years agoContributor
Good morning - Bonjour bbl
Thank you very much, I will go through your code, implement it and update you.
Merci beaucoup
Related Content
- 3 years ago
- 10 months ago
- 8 years ago
Recent Discussions
- 21 hours ago