我正在研究 John Sonmez 的 Selenium 测试框架教程,并在尝试执行第一个测试时遇到问题。测试部分包含两个方法:1. LoginPage.GoTo();
打开 wordpress 登录页面和 2. LoginPage.LoginAs("admin").Login();
插入用户名并点击继续。
当我运行测试时发生的事情是 wordpress 登录页面打开,2 秒后空白 Chrome 浏览器打开并且 JUnit 显示 NoSuchElementException。教程的作者在 LoginPage.GoTo();
方法中添加了一些 WebDriverWait
和 switchTo.ActiveElement.getAttribute()
解决了这个问题。然而,他使用 C# 进行编码,但没有为我使用的 Java 提供解决方案。我也尝试应用 WebDriverWait
,但问题仍然存在。谁能建议我如何在 Java 中使用 WebDriverWait
解决这个问题。
登录测试
import static org.junit.Assert.*;
import org.junit.Assert;
import org.junit.Test;
import wordpressAutomation.Driver;
import wordpressAutomation.LoginPage;
public class LoginTest extends Driver {
@Test
public void admin_user_can_login() {
LoginPage l = new LoginPage();
l.GoTo();
LoginPage.LoginAs("scenicrail").Login();
//Assert.assertTrue(DashboardPage.IsAt, "Failed to login");
}
}
登录页面
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class LoginPage extends Driver {
@Test
public void GoTo() {
openBrowser().get("https://wordpress.com/log-in");
}
public static LoginCommand LoginAs(String username) {
return new LoginCommand(username);
}
}
public class LoginCommand extends Driver {
private String username;
private String password;
public LoginCommand(String username) {
this.username = username;
}
public LoginCommand WithPassword(String password) {
this.password = password;
return this;
}
public void Login() {
WebElement login = openBrowser().findElement(By.xpath("//*[@id='usernameOrEmail']"));
login.sendKeys(username);
openBrowser().findElement(By.xpath("//button[@type = 'submit']")).click();
}
}
public class Driver {
public WebDriver openBrowser() {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\KatarinaOleg\\Desktop\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
return driver;
}
}
最佳答案
打开页面后,您可以在出现 NoSuchElementException 的地方添加类似这样的内容。
FluentWait<WebDriver> webDriverWait = new WebDriverWait(driver, 25).pollingEvery(5, TimeUnit.SECONDS);
webDriverWait.until(ExpectedConditions.visibilityOf(webElement));
只需添加您要用作检查的任何元素以确保页面已加载
关于java - 使用 Java 测试登录时 Selenium 中的 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962510/