0

У меня есть код, который вызывает хром-драйвер, а затем переходит на сайт footlocker. Открыв сайт footlocker, он находит и нажимает кнопку Mens. Затем он просматривает список продуктов под мужчинами и выбирает один случайным образом. Проблема, с которой я сталкиваюсь, заключается в том, что он каждый раз выбирает один и тот же продукт. Вот мой код. Способ выбора случайного продукта находится под selectRandomProductВыберите случайный элемент из списка в Selenium Webdriver Java

public class FootlockerExample { 

WebElement next; 
WebDriver driver = new ChromeDriver(); 

public void productOne(){ 

    // Open Chrome Browser 
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\Working\\Workspace\\SeleniumProject\\chromedriver.exe"); 

    // Open Footlocker website and maximize window 
    driver.get("http://www.footlocker.ca/"); 
    driver.manage().window().maximize(); 

    // Find button element 'Mens' and click 
    next = driver.findElement(By.xpath("//*[@id='global-nav']/ul/li[1]/a")); 
    next.click(); 

    // Select a random product 
    selectRandomProduct(); 

    // Print out the product name and price 
    String productName = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[1]")).getText(); 
    String Price = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[2]")).getText(); 
    System.out.println("The 1st random product is " + productName + " and it's cost is " + Price + "."); 

    // Execute new method 
    productTwo(); 
} 

public void productTwo(){ 

    // Go back a browser page 
    driver.navigate().back(); 
    selectRandomProduct(); 

    // Print out the product name and price 
    String productName = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[1]")).getText(); 
    String Price = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[2]")).getText(); 
    System.out.println("The 2nd random product is " + productName + " and it's cost is " + Price + "."); 
} 

public void selectRandomProduct(){ 

    // Find and click on a random product 
    List<WebElement> allProducts = driver.findElements(By.xpath("//*[@id='endecaResultsWrapper']/div[3]")); 
    Random rand = new Random(); 
    int randomProduct = rand.nextInt(allProducts.size()); 
    allProducts.get(randomProduct).click(); 
} 

public static void main(String[] args) { 

    FootlockerExample obj1 = new FootlockerExample(); 
    obj1.productOne(); 
} 

}

+1

Не могли бы вы предоставить ссылку на сайт footlocker? Кажется, у них разные раскладки страниц для разных стран. В то же время, можете ли вы проверить, действительно ли allProducts.size()> 1? – oschlueter

+0

Уверенный веб-сайт, который я использую, предназначен для Канады. http://www.footlocker.ca/. Как я могу выполнить проверку, чтобы увидеть, есть ли allProducts.size()> 1? Я довольно новичок в Селене. –

ответ

1

Я посмотрел на веб-сайте, и я узнал, что ваш XPath (//*[@id='endecaResultsWrapper']/div[3]) выбирает весь DIV, где есть все изображения. Поэтому в основном, когда вы нажимаете на случайный элемент, он находит только один (главный div). Если вы хотите нажать на один из 60 продуктов, вы должны попробовать что-то вроде этого: //*[@id='endecaResultsWrapper']/div[3]//img.

+0

Большое вам спасибо! Это, похоже, устранило проблему и теперь каждый раз выбирает разные продукты. Спасибо еще раз. –

+0

Добро пожаловать :) –