我是自动化的新手,使用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;尝试了预期条件。
我希望通过单击“全部接受”按钮关闭弹出窗口。
谢谢大家!
2条答案
按热度按时间5t7ly7z51#
我没有在这个页面上得到任何弹出窗口。但可能这个弹出窗口包含在'iframe'块中。如果是这样,您应该首先切换到'iframe',然后才对元素执行一些操作
看看这个https://www.selenium.dev/documentation/webdriver/interactions/frames/
drnojrws2#
您可以尝试使用显式等待来等待元素出现,然后再与之交互。您可以使用ExpectedConditions类来等待元素可见并可单击,然后再与之交互。