J'ai WebElement que je dois convertir en Testobject dans katalon en utilisant un script groovy.
Par exemple
List<WebElement> WEs = WebUI.executeJavaScript("return document.querySelector('#email').parentElement", [])
Maintenant, je veux convertir WE [0] en TestObject ce que Katalon accepte.
S'il vous plaît laissez-moi savoir si vous avez une idée à ce sujet.
3 Réponses :
Il n'y a pas de moyen direct de convertir les WebElements en TestObjects. Selon cette question du forum , vous pouvez créer une fonction pour obtenir le xpath de l'élément Web
WebUiCommonHelper.findWebElement(test-object, timeout)
puis créer un nouvel objet de test avec le xpath donné:
protected TestObject fromElement(RemoteWebElement element) { TestObject testObject = new TestObject(); testObject.addProperty("xpath", ConditionType.EQUALS, getXPathFromElement(element)); return testObject; }
REMARQUE:
Pour une autre solution (Test Object -> WebElement), utilisez
protected String getXPathFromElement(RemoteWebElement element) { String elementDescription = element.toString(); return elementDescription.substring(elementDescription.lastIndexOf("-> xpath: ") + 10, elementDescription.lastIndexOf("]")); }
Je pense que element.toString () ne renvoie pas xpath à chaque fois, j'ai essayé et je n'ai pas obtenu xpath. J'utilise le code suivant pour obtenir l'élément Web WebElement element = WebUI.executeJavaScript ("return document.querySelector ('. Text-center img')", []) String elementDescription = element.toString (); println (elementDescription.substring (elementDescription.last IndexOf ("-> xpath:") + 10, elementDescription.lastIndexOf ("]")))
S'il vous plaît laissez-moi savoir si je me trompe.
L'élément
dans votre exemple est sélectionné par un localisateur css. Avez-vous besoin d'utiliser WebUI.executeJavaScript () pour sélectionner l'élément? C'est plus simple en utilisant css ou xpath.
Oui, parfois, j'ai besoin d'obtenir des éléments en utilisant WebUI.executeJavaScript (), puis je dois convertir ces éléments en TestObject.
Pour créer un objet de test à partir de n'importe quel élément Web, j'ai développé la fonction ci-dessous
public static TestObject getTestObjectFromWebElement(WebElement element) { TestObject object = new TestObject() object.addProperty("xpath", ConditionType.CONTAINS, functions.WebElementXPath(element)) return object }
Et puis j'ai créé une fonction pour obtenir un objet de test comme ci-dessous, comme suggéré par Mate MrÅ¡e p>
public static String WebElementXPath(WebElement element) { if (element.tagName.toUpperCase() == 'HTML') return '/html'; if (element.tagName.toUpperCase() == 'BODY') return '/html/body'; // calculate position among siblings int position = 0; // Gets all siblings of that element. List<WebElement> siblings = WebUI.executeJavaScript("return arguments[0].parentNode.childNodes", [element]) WebElement innerSibs //List<WebElement> siblings = element.parentNode.childNodes; WebElement sibling def type,response for(int i=0;i<siblings.size();i++){ type = WebUI.executeJavaScript("return arguments[0].nodeType", [siblings[i]]) if (type == null){ continue; } if(type!=1){ continue; } sibling = siblings[i]; // Check Siblink with our element if match then recursively call for its parent element. if (sibling == element) { innerSibs = WebUI.executeJavaScript("return arguments[0].parentElement", Arrays.asList(sibling)) if(innerSibs==null){ return "" } response = functions.WebElementXPath(innerSibs) return response+'/'+element.tagName+'['+(position+1)+']'; } // if it is a siblink & element-node then only increments position. type = WebUI.executeJavaScript("return arguments[0].nodeType", [sibling]) if (type == 1 && sibling.tagName == element.tagName) position++; } }
Remarque: le dossier "Framework" a été créé par nous comme dans le dossier Keyword et ensuite Nous avons créé le mot-clé "functions"
J'espère que cela pourra aider d'autres développeurs.
WebUI.convertWebElementToTestObject ()
Veuillez fournir plus de détails à votre réponse. Montrez des exemples si possible. Les réponses d'une seule ligne sans explication sont difficiles à comprendre.