【发布时间】:2021-06-02 20:09:58
【问题描述】:
所以我正在尝试使用我的 Vue.js 作为前端对我的 Spring Boot Rest API 进行集成测试。当我想从需要 JWT 身份验证的页面中测试某些内容时,就会出现问题,但我似乎无法进入该页面。对于单元测试,我可以使用
@WithMockUser
注释,绕过身份验证的需要,进入需要的页面。
我对此很陌生。这是我到目前为止所得到的:
package com.example.SeleniumTesting;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
public class FirstMainPageTest {
WebDriver driver = new ChromeDriver();
WebDriver driver2 = new ChromeDriver();
WebDriver driver3 = new ChromeDriver();
@BeforeTest
public void setUp(){
System.setProperty("webdriver.chrome.driver", ".\\chromedriver.exe");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("http://localhost:8081");
System.setProperty("webdriver.chrome.driver", ".\\chromedriver.exe");
driver2.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver2.manage().window().maximize();
driver2.get("http://localhost:8081/parties");
System.setProperty("webdriver.chrome.driver", ".\\chromedriver.exe");
driver3.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver3.manage().window().maximize();
driver3.get("http://localhost:8081/parties");
}
@Test
public void loadHomePageTitle(){
WebElement element = driver.findElement(By.cssSelector("h1"));
element.isDisplayed();
}
@Test
public void loadTheUnauthorizedPage(){
WebElement element = driver2.findElement(By.cssSelector("h1"));
element.isDisplayed();
element.getText();
}
@AfterTest
public void doThis(){
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.quit();
}
}
我在这里也尝试过使用@WithMockUser,但这不起作用。任何人都可以帮助我如何做到这一点或指出我正确的方向(链接到显示类似问题的网站?
提前致谢!
【问题讨论】:
-
普通用户如何进行认证?如果可能的话,你也需要使用 Selenium。如果您不进行所需的身份验证,预计您将无法访问需要身份验证的页面。
-
身份验证机制旨在防止任何未经身份验证的用户。如果您不进行身份验证,这也会阻止 Selenium 访问。这是意料之中的,而且确实不应该有任何解决方法或绕过方法。
-
@eis 通常用户会进入登录页面并填写用户名和密码,如果凭据正确,则 jwt 令牌会存储在本地存储中。如果本地存储中有有效的 jwt 令牌,则用户可以访问此页面。那么我应该在测试中执行所有这些吗?
-
是的,你应该这样做。您也可以在本地存储like this 中放置一个虚拟令牌,但由于例如到期应由服务器验证,因此这不应该工作 - 因此您需要执行正确的登录步骤。
标签: spring-boot vue.js jwt selenium-chromedriver integration-testing