java 绕过“全部接受”Cookie-预期条件失败:等待元素可单击

zc0qhyus  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(243)

我是自动化的新手,使用JAVA和Selenium在网站上做一些基本的测试,我偶然发现了一个Cookie弹出窗口。
当我试图单击该元素时,它似乎在页面上不可见(waitForElementToBeVisible也没有这样做)。
我已经阅读了SO和YT视频上关于如何绕过这个问题的所有相关帖子,它似乎对我不起作用。

package pageObjects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class Login {
    private static final String BASE_URL = "https://www.demo.guru99.com/V4/";
    private static final By USER_ID = By.name("uid");
    private static final By PASSWORD = By.name("password");
    private static final By LOGIN_BTN = By.name("btnLogin");
    private static final By ACCEPT_PRIVACY = By.xpath("//*[@id=\"save\"]/span[1]/div");;

    private WebDriver driver;

    public Login(WebDriver driver) {
        this.driver = driver;
    }

    public void navigate() {
        driver.get(BASE_URL);
    }

    public void setUsername(String username) {
        driver.findElement(USER_ID).clear();
        driver.findElement(USER_ID).sendKeys(username);
    }

    public void setPassword(String password) {
        driver.findElement(PASSWORD).clear();
        driver.findElement(PASSWORD).sendKeys(password);
    }

    public void clickLogin() {
        driver.findElement(LOGIN_BTN).click();
    }

    public void clickAcceptPrivacy() {
        driver.findElement(ACCEPT_PRIVACY).click();
    }

//    public String popupText() {
//        String text = driver.findElement(ACCEPT_PRIVACY).getText();
//        return text;
//    }
//
//    public void waitAcceptPrivacy() {
//        new WebDriverWait(driver, Duration.ofSeconds(3)).until(ExpectedConditions.elementToBeClickable(ACCEPT_PRIVACY)).click();
//    }

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import pageObjects.Login;

import java.util.concurrent.TimeUnit;

public class TestDrive {
    private final WebDriver driver = new ChromeDriver();
    private final Login login = new Login(driver);

    @Before
    public void setup() {
        //use Chrome driver
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }

    @After
    public void tearDown() {
        driver.quit();
    }

    @Test
    public void Test1() throws InterruptedException {
        login.navigate();
        Thread.sleep(1000);
        login.clickAcceptPrivacy();
        login.setUsername("mngr473114");
        login.setPassword("ajybEvu");
        Thread.sleep(2000);
        login.clickLogin();
    }
}

}

这是我得到的错误:

org.openqa.selenium.NoSuchElementException: Unable to find element with locator By.xpath: //*[@id="save"]/span[1]/div

尝试了不同的xpath,css;尝试了预期条件。
我希望通过单击“全部接受”按钮关闭弹出窗口。
谢谢大家!

5t7ly7z5

5t7ly7z51#

我没有在这个页面上得到任何弹出窗口。但可能这个弹出窗口包含在'iframe'块中。如果是这样,您应该首先切换到'iframe',然后才对元素执行一些操作

//Store the web element
WebElement iframe = driver.findElement(By.cssSelector("iframe path"));

//Switch to the frame
driver.switchTo().frame(iframe);

//Now we can click the button
driver.findElement(ACCEPT_PRIVACY).click();

看看这个https://www.selenium.dev/documentation/webdriver/interactions/frames/

drnojrws

drnojrws2#

您可以尝试使用显式等待来等待元素出现,然后再与之交互。您可以使用ExpectedConditions类来等待元素可见并可单击,然后再与之交互。

public void clickAcceptPrivacy() {
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement acceptPrivacy = wait.until(ExpectedConditions.elementToBeClickable(ACCEPT_PRIVACY));
    acceptPrivacy.click();
}

相关问题