J'ai pour objectif de renvoyer la liste déroulante des éléments. J'ai essayé de le faire avec les méthodes du rapporteur, mais je n'avais pas trouvé de moyens faciles pour rechercher des éléments à travée isolée. Pour cette raison, je veux utiliser le code javasript:

var my_js_element = browser.executeScript(jQuery("td.ng-binding>div.b-combobox.ps-list-drop-single-autocomplete.ng-isolate-scope.ng-pristine.ng-required.ng-invalid.ng-invalid-required").isolateScope().psListDrop.toggleVisible(true).element);

Mais ça ne marche pas. Et je ne suis pas sûr de pouvoir renvoyer des éléments avec cette méthode. Est-ce vrai? Ou peut-être que quelqu'un sait comment je peux faire ça?

1
Лилия Сапурина 16 juil. 2015 à 14:48

2 réponses

Meilleure réponse

Selon la documentation de browser.executeScript :

Si le script a une valeur de retour (c'est-à-dire si le script contient une instruction return), les étapes suivantes seront suivies pour résoudre la valeur de retour de cette fonction: - Pour un élément HTML, la valeur se résoudra en un webdriver.WebElement.

À partir de votre appel executeScript, vous devez renvoyer un élément HTML, également un élément DOM "natif", afin qu'il puisse être converti en webdriver.WebElement. Ensuite, cet élément est résolu via des promesses et est disponible comme argument dans un callback pour .then():

browser.executeScript(function () {

    var element = jQuery('.world').get(0); // get "native" DOM node

    return element; // explicit return

}).then(function (webElement) {

    expect(webElement.getText()).toContain('Hello');

});
6
Michael Radionov 16 juil. 2015 à 12:34

Donc Protractor est construit sur la spécification WebDriver.

Selon la spécification, il est possible de renvoyer des valeurs à partir de scripts exécutés. Il se peut que ce soit JSON qui vous obligerait à le reconvertir. Vous pouvez en savoir plus ici.

Essayez de consigner la valeur renvoyée. Vous pouvez également explorer l'utilisation d'un sélecteur XPATH pour trouver votre élément.

Quelque chose comme:

//td[class="ng-binding"]/div[class="b-combobox" and class="ps-list-drop ...]

2
Breedly 16 juil. 2015 à 12:30