gpt4 book ai didi

java - 导航回同一页面后无法再次单击随机链接 - Selenium 自动化

转载 作者:行者123 更新时间:2023-11-30 05:44:17 24 4
gpt4 key购买 nike

我正在研究浏览器自动化(java + selenium)。我在网上商店的产品页面上,有一些代码可以单击随机产品链接,因此浏览器会登陆随机产品。这是可行的,但是当我返回同一页面并使用相同的代码再次执行单击随机链接时,它根本不起作用。我看不出任何原因,有人可以帮忙吗?代码在这里:

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();

最佳答案

当您导航到另一个页面(甚至刷新当前页面)时,先前定位的元素就会变得过时,因此您会收到 StaleElementReferenceException。您需要重新定位链接

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

关于java - 导航回同一页面后无法再次单击随机链接 - Selenium 自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55121537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com