Je cours mes tests sur la machine Linux et là avec le code suivant, il ne tape pas le texte correctement - in ui, en réalité, un texte différent est typé comme - "sur Linux Machine je suis en cours d'exécution "," Courir sur la machine Linux, je suis "etc p> Par conséquent, j'ai utilisé JavaScript comme - p> Comme dans le champ de texte, mais après avoir tapé cela, il y a mais ce bouton est activé si Pourriez-vous s'il vous plaît laissez-moi savoir pourquoi ce javascript se comporte différemment et fournit JavaScript correct? p> Comment les deux choses fonctionneront en solution unique (sans tabouillage pour activer le bouton car ce n'est pas correct dans ma situation)? P> P> Enregistrer le bouton code> qui devrait être activé mais qui n'est pas activé. p> SendKeys code> est utilisé. P>
3 Réponses :
Essayez d'écrire dans un style de promesse ou async / attente de style.
async clear_elem(elem) {
// elem.clear(), MAY not work always because of some background JS
await elem.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, 'a'));
await elem.sendKeys(protractor.Key.DELETE);
// Can await here for Application Load
}
reverse_string = as => as.split('').reverse().join();
// intersperse - Places an Item in between elements of an array
// ex: intersperse('k')("abc") => ['a', 'k', 'b', 'k', 'c']
intersperse = x => as => as.split('').reduce((acc, x) => [...acc, a, x], []).slice(0, -1);
(async () => {
// Assuming you have element - visibleElement
await browser.wait(protractor.ExpectedConditions.elementToBeClickable(visibleElement), default_timeout);
await clear_elem(visibleElement);
const str = reverse_string('I am running on linux machine');
const sequence_of_characters = intersperse(protractor.Key.HOME)(str);
// e, HOME, n, HOME, i, HOME, h, HOME, ...
await visibleElement.sendKeys(protractor.Key.chord(...sequence_of_characters));
})();
Essayé cela mais n'a pas aidé :(
Je l'ai modifiée pour cliquer sur le bouton Accueil pour chaque personnage Entrée.
paramètre Le comportement que vous décrivez me fait penser que JavaScript écoute déjà pour l'événement de changement, puis brouillant l'ordre des mots comme si Yoda les saisit. (ou les tapé-données Yoda a?) Déclenchement de l'événement de changement manuellement peut activer le bouton "Enregistrer" et vous pouvez toujours vous retrouver avec le même texte que l'utilisation de argument [0] .value = "..." code> définit la valeur dans le champ de texte, mais aucun événement n'est déclenché sur cet élément. Le bouton "Enregistrer" attend probablement un événement code> modifier code> quelque part dans le SendKeys code> aboutirait. Si c'est le cas , vous voudrez peut-être activer le bouton "Enregistrer" avec JavaScript aussi: P> // Set the input text
jse.executeScript("arguments[0].value='I am running on linux machine';", visibleElement);
// Find the "Save" button
WebElement saveButton = driver.findElement(...);
// Enable the save button
jse.executeScript("arguments[0].disabled = false;", saveButton);
saveButton.click();
Pour commencer avec l'élément étant Pour appeler Vous pouvez trouver une discussion détaillée pertinente dans SendKeys () Code> Dans l'élément souhaité, vous devez induire WebDriverwait em> pour le ElementTobeclickable () < / Code> Et vous pouvez utiliser ce qui suit Stratégie de localisation : p>
tl; Dr H2>
Avez-vous essayé une attente explicite et
ElementTobeclickable code>?Oui, j'ai essayé que pour le bouton
Enregistrer code> et je peux voir que ce bouton n'est jamais activé.Non, je parle de champ de saisie Avez-vous essayé d'attendre explicite et
ElementTobeclickable code>? puis essayer poursendkeys () code>Oui essayé aussi bien que le même comportement.
Est-il possible de partager un lien si ce public pour diagnostiquer.
L'application que je teste est privée, n'est pas accessible publiquement.
Vous avez ceci tagué avec "JavaScript" mais le code de sélénium semble être Java.
@Gregburghardt, vous avez raison, le code de sélénium est en Java, mais il a utilisé JavaScript pour effectuer la saisie de texte. Au cas où il y a une meilleure solution de JavaScript Guys, je l'ai marqué.