java - 使用 Java 测试登录时 Selenium 中的 NoSuchElementException

标签 java selenium selenium-webdriver

我正在研究 John Sonmez 的 Selenium 测试框架教程,并在尝试执行第一个测试时遇到问题。测试部分包含两个方法:1. LoginPage.GoTo(); 打开 wordpress 登录页面和 2. LoginPage.LoginAs("admin").Login(); 插入用户名并点击继续。 当我运行测试时发生的事情是 wordpress 登录页面打开,2 秒后空白 Chrome 浏览器打开并且 JUnit 显示 NoSuchElementException。教程的作者在 LoginPage.GoTo(); 方法中添加了一些 WebDriverWaitswitchTo.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/

相关文章:

java - 通过服务器运行Java

java - 通过操作事件更改 JPanel 组件的属性

java - 对象化查询 : filter by date

python - Selenium 网络驱动程序 : How do I find ALL of an element's attributes?

selenium - 在 Linux 中禁用 Firefox 自动更新

java - 如何点击网页元素来显示日期选择器?

java - 在android Activity中显示docx文件的内容

python - 用于 Selenium Scraping 的 Mozilla Firefox 命令行安装

selenium - 未创建 Webdriver.io session : Unable to create new service: GeckoDriverService

facebook - 创建后如何获取 Facebook 测试用户电子邮件和密码?