Essayer d'automatiser les tests d'interface utilisateur à l'aide du sélénium '3.14.0' java '1.8.0_151' L'automatisation s'exécute sur une interface graphique autonome et en tant que plug-in sur un autre système dans l'iframe interne J'ai une étiquette faisant référence à une case à cocher cachée, des éléments partiels que vous pouvez voir ci-dessous ..
WebDriver driver = new ChromeDriver(chromeOptions);
WebDriverWait wait = new WebDriverWait(driver, WEBDRIVER_WAIT_TIME_SEC);
WebElement plugin = getRemoteIframe(By.cssSelector(pluginIframeCss));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(plugin));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("my-id")));
element.click();//throws WebDriverException
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("my-id")));
element.click();//throws WebDriverException
En cliquant sur l'étiquette à partir de l'interface utilisateur autonome - cela fonctionne bien, mais en cliquant sur la même quand il est dans l'iframe du système conteneur, j'obtiens:
org.openqa.selenium.WebDriverException: unknown error: no element reference returned by script
(Session info: chrome=78.0.3904.97)
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 78.0.3904.97, chrome: {chromedriverVersion: 78.0.3904.11 javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 80eb99bb78d864bcd2a4c1d4205a5d1c
code:
input[type=checkbox] {
display: none;
label {
cursor: pointer;
display: inline-block;
width: 100%;
padding: 0 0 0 1.333333rem;
sachez que j'ai trouvé l'élément avec tous les attributs, l'élément est visible et cliquable et lorsque vous essayez de cliquer dessus à partir de la console (F12) cela fonctionne, seul le clic par code lève une exception ...
Est-ce que quelqu'un connaît ce problème? / p>
3 Réponses :
Pouvez-vous essayer d'effectuer une opération de clic avec javascriptExecutor. Peut-être l'élément remplacé par un autre webElement.
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", webElement);
wait for elementToBeClickable (By.id ("....")) et visibilitéOfElementLocated (By.id ("....")) ont renvoyé l'élément et même si le clic () a échoué ...
cliquer sur JavascriptExecutor fonctionne bien, mais pensez-vous que je dois l'utiliser? pas de solution pour utiliser element.click ()?
Oui, nous pouvons utiliser javascriptExecutor chaque fois qu'un élément est remplacé ou masqué par un autre objet DOM. C'est pourquoi la fonctionnalité est donnée
Si votre élément se trouve dans une iframe , vous devez d'abord passer à l'iframe comme ceci:
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("my-id")));
element.click();
alors vous pouvez tout ce que vous voulez avec cet élément
driver.switchTo().frame(driver.findElement(By.id("frameId")));
bien sûr, je suis entré dans l'iframe - si je n'y étais pas, je n'obtiendrais pas d'exception
pouvez-vous s'il vous plaît écrire votre code de manière plus complète?
Pilote WebDriver = nouveau ChromeDriver (chromeOptions); WebDriverWait wait = nouveau WebDriverWait (pilote, WEBDRIVER_WAIT_TIME_SEC); Plugin WebElement = getRemoteIframe (By.cssSelector (pluginIframeCss)); wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToI t (plugin)); Élément WebElement = wait.until (ExpectedConditions.visibilityOfElementLocated (By. id (ID))); element.click ();
J'obtiens l'exception dans element.click () - bloc de code édité en question pour une meilleure compréhension
Je ne sais pas pourquoi ce problème se produit. Mais vous pouvez essayer d'utiliser Action Class.
Actions builder = nouvelles actions (pilote); Action clickLabel = builder.moveToElement (driver.findElement (By.id ("my-id"))). Click (). Build (); clickLabel.perform ();
Plus d'informations sur https://www.guru99.com/keyboard-mouse-events- files-webdriver.html
Bien que le problème ne soit pas lié à ceci: la version de Selenium que vous avez mentionnée est assez ancienne. Vous pouvez essayer avec la dernière version: 3.141.59
J'ai essayé votre réponse mais a échoué sur la même exception ... new Actions (driver) .moveToElement (driver.findElement (by)). Click () .build (). Perform () jette: erreur inconnue: aucune référence d'élément renvoyée par script (Informations de session: chrome = 78.0.3904.97) Essayera de mettre à niveau vers la dernière version de sélénium ...