J'exécute un test automatisé en sélénium / intelliJ / Java. Le webdriver est censé cliquer sur le menu déroulant de la barre de navigation Amazon, puis sur l'un des liens dans le menu déroulant. Il fait ces deux choses correctement, l'option déroulante mène à son lien, cependant le test de sélénium lui-même échoue, voici l'erreur:
package com.testing.webdriver; import io.github.bonigarcia.wdm.WebDriverManager; import org.junit.*; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; import java.util.Random; import java.util.concurrent.TimeUnit; public class MyFirstTest { WebDriver driver = new ChromeDriver(); @BeforeClass public static void setupWebdriver() { WebDriverManager.chromedriver().setup(); } private static final By SHOP_BY_DEPARTMENT = By.cssSelector("#nav-link-shopall"); private static final By SHOP_ALL = By.cssSelector("#nav-flyout-shopAll > div.nav-template.nav-flyout-content.nav-tpl-itemList > a"); @Test public void startWebdriver() { driver.navigate().to("https://www.amazon.co.uk/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); WebElement shopByDepartment = driver.findElement(SHOP_BY_DEPARTMENT); shopByDepartment.click(); WebElement ShopAllNav = driver.findElement(By.linkText("Full Shop Directory")); ShopAllNav.click(); Assert.assertTrue("matches current url", driver.getCurrentUrl().matches("https://www.amazon.co.uk/gp/site-directory/ref=nav_shopall_fullstore")); } @After public void breakdown() throws InterruptedException { Thread.sleep(20000); driver.close(); }
et voici mon code:
XXX
Le test devrait réussir car il fait ce que je lui dis. Je suppose que c'est quelque chose à voir avec le lien dans le menu déroulant, comme le dit l'erreur, mais je ne sais toujours pas comment je corrigerais cela. Toute aide serait appréciée, merci.
3 Réponses :
Ce que j'ai vu sur amazon:
Le 'répertoire complet de la boutique' n'est pas (vraiment un texte de lien).
si l'élément est ceci est un texte
alors je le considère comme le texte du lien.
Dans votre cas, le texte est formé avec beaucoup d'espaces blancs ********** Répertoire complet de la boutique ********** et ce floconneux et peut causer des problèmes (possible dans votre cas).
Corrigez votre localisateur pour qu'il soit struct-safe et réessayez.
Exemple:
xpath: // a / span [@ class = 'nav-text' and text () = 'Répertoire complet de la boutique']
Mise à jour: Votre test est mal rédigé ou vous ne savez pas quel est votre objectif réel.
Ce que vous faites:
Étapes suggérées:
Passez à "Magasiner par service" et activez le menu déroulant.
cliquez sur le bouton "Répertoire complet de la boutique" dans la liste déroulante.
attendre le chargement de la page
affirmer l'URL de la page.
Code:
driver.navigate().to("https://www.amazon.co.uk/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); WebElement shopByDepartment = driver.findElement(SHOP_BY_DEPARTMENT); Actions ac = new Actions(driver); ac.moveToElement(shopByDepartment).perform(); WebElement ShopAllNav = driver.findElement(By.linkText("Full Shop Directory")); ShopAllNav.click(); Assert.assertTrue(driver.getCurrentUrl().matches("https://www.amazon.co.uk/gp/site-directory/ref=nav_shopall_fullstore"), "matches current url");
Le code a été testé et confirmé comme fonctionnant.
J'ai essayé de faire la même chose avec un sélecteur css à la place (qui n'a pas fonctionné) donc je suppose que ce n'est pas le problème.
êtes-vous sûr qu'un seul élément correspond au localisateur?
Je suis presque sûr que oui, le localisateur est là-haut, c'est mon code, la deuxième finale statique privée (SHOP_ALL), c'est assez spécifique
votre test est écrit assez usé. Vous cliquez sur le menu de navigation et ouvrez la page «boutique complète». Et puis essayez de cliquer sur le bouton qui se trouve dans la liste déroulante de SHOP_BY_DEPARTMENT. vérifier la mise à jour de ma réponse
Vous devez attendre que ce composant particulier soit visible. Après sa visibilité, vous pouvez lui appliquer une action.
Vous pouvez essayer le code ci-dessous.
WebElement ShopAllNav = driver.findElement(By.linkText("Full Shop Directory")); WebDriverWait wait = new WebDriverWait(driver,200); wait.until(ExpectedConditions.visibilityOf(ShopAllNav)); ShopAllNav.click();
Merci mais ça ne marche pas, j'obtiens toujours la même erreur
Vous pouvez utiliser ce code ci-dessous: WebElement ShopAllNav = driver.findElement (By.linkText ("// * [@ id =" nav-flyout-shopAll "] / div [2] / a / span"));
Il dit `` impossible de résoudre '' pour la partie `` nav-flyout-shopAll ''
Pour développer le menu déroulant sur la barre de navigation Amazon , pas besoin de click()
plutôt que de Mouse Hover induisant WebDriverWait et vous pouvez utiliser la solution suivante:
Bloc de code:
Starting ChromeDriver 2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387) on port 41299 Only local connections are allowed. Jan 25, 2019 5:41:24 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS
Sortie de la console:
System.setProperty("god.bless.you", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("start-maximized"); options.addArguments("disable-infobars"); options.addArguments("--disable-extensions"); WebDriver driver = new ChromeDriver(options); driver.get("https://www.amazon.co.uk/"); new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div#nav-shop>a#nav-link-shopall")))).perform(); new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.nav-catFlyout.nav-flyout div.nav-template.nav-flyout-content.nav-tpl-itemList a"))).click(); Assert.assertTrue(driver.getCurrentUrl().matches("https://www.amazon.co.uk/gp/site-directory/ref=nav_shopall_fullstore")); driver.quit();