Не могу снова нажать случайную ссылку после перехода на ту же страницу - автоматизация селена - PullRequest
1 голос
/ 12 марта 2019

Я работаю над автоматизацией браузера (Java + селен).Я нахожусь на странице продуктов в интернет-магазине, и у меня есть немного кода, который нажимает на ссылку случайного продукта, поэтому браузер выбирает случайный продукт.Это работает, однако, когда я возвращаюсь на ту же страницу и использую тот же код для повторного нажатия на случайную ссылку, это просто не работает.Я не вижу никакой причины для этого, кто-то может помочь?Код здесь:

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 org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


import javax.swing.*;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.List;


public class MyFirstTest {
    WebDriver driver = new ChromeDriver();

    @BeforeClass
    public static void setupWebdriver() {
        WebDriverManager.chromedriver().setup();
    }

    private static final By ABOUT_US_BUTTON = By.cssSelector("body > nav > ul.main-navigation > li:nth-child(2) > a");
    private static final By RT_SEARCH_BAR = By.cssSelector("#header > div.header__section.header__section_border-bottom_gray > div > div.header__seach-form > form > div > span > input");
    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");
    private static final By RANDOM_PRODUCT = By.cssSelector("#amshopby-page-container > div.category-products > div.products > ul > li");
    private static final By NATIONAL_NAV_BUTTON = By.cssSelector("#nav-3 > a");



    @Test
    public void startWebdriver() throws InterruptedException {


        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.navigate().to("http://seleniumsimplified.com");
        driver.manage().window().maximize();



        Actions action = new Actions(driver);


        driver.navigate().to("https://www.classicfootballshirts.co.uk/");
        WebElement nationalNavButton = driver.findElement(NATIONAL_NAV_BUTTON);
        action.moveToElement(nationalNavButton).perform();
        Thread.sleep(2000);

        WebElement belgiumDropDown = driver.findElement(By.linkText("Belgium"));
        action.moveToElement(belgiumDropDown);
        action.click();
        action.perform();

        Assert.assertTrue("matches current url",
                driver.getCurrentUrl().matches("https://www.classicfootballshirts.co.uk/international-teams/european/belgium.html"));




        List<WebElement> links = driver.findElements(By.cssSelector("#amshopby-page-container > div.category-products > div.products > ul > li > div > h2 > a"));
        links.get(new Random().nextInt(links.size())).click();
        Thread.sleep(2000);

        driver.navigate().back();
        Thread.sleep(2000);   
        links.get(new Random().nextInt(links.size())).click();
        Thread.sleep(2000);

Я попытался вернуться к предыдущему URL-адресу напрямую, но это тоже не работает.Если неясно, что проблема со вторым экземпляром:

links.get(new Random().nextInt(links.size())).click();

1 Ответ

1 голос
/ 12 марта 2019

При переходе на другую страницу (или даже обновлении текущей страницы) ранее расположенные элементы становятся устаревшими, поэтому вы получаете StaleElementReferenceException. Вам нужно переместить ссылки

driver.navigate().back();
links = driver.findElements(By.cssSelector("#amshopby-page-container > div.category-products > div.products > ul > li > div > h2 > a"));
...