Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何使用Selenium绕过JWT身份验证?_Spring Boot_Vue.js_Jwt_Selenium Chromedriver_Integration Testing - Fatal编程技术网

Spring boot 如何使用Selenium绕过JWT身份验证?

Spring boot 如何使用Selenium绕过JWT身份验证?,spring-boot,vue.js,jwt,selenium-chromedriver,integration-testing,Spring Boot,Vue.js,Jwt,Selenium Chromedriver,Integration Testing,因此,我试图用Vue.js作为前端,对我的Spring boot rest API进行集成测试。当我想从需要JWT身份验证的页面上测试某些内容时,问题就出现了,我似乎无法进入该页面。对于单元测试,我可以使用 @WithMockUser 注释,它绕过了在需要验证的页面上进行验证的需要 我对这是全新的。以下是我到目前为止得到的信息: package com.example.SeleniumTesting; import org.openqa.selenium.By; import org.ope

因此,我试图用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测试是黑盒测试模式的一部分,因此它们的目的是从外部测试系统,而不必跳过普通用户会做的任何事情。因此,我更愿意自动化应用程序的登录部分。登录功能是您编写一次,并且只在所有测试中使用的功能(例如Junit@Before)。

Selenium测试是黑盒测试模式的一部分,因此它们的目的是从外部测试系统,而不必跳过普通用户会做的任何事情。因此,我更喜欢自动化应用程序的登录部分。登录功能是您编写一次,并且只在所有测试中使用(例如Junit@Before)。

身份验证机制旨在阻止任何未经身份验证的用户。如果您不进行身份验证,这也将阻止Selenium访问。这是意料之中的,并且确实不应该有任何解决方法或绕过方法


如前一个答案中所述,您应该执行普通用户将执行的所有登录步骤。可能是您可以在测试之间重用登录状态,如果假设真实用户也会这样做,您可以使用登录状态。但是,新的登录将给您带来更好的测试结果和信心。

身份验证机制旨在事件。如果您不进行身份验证,这也会阻止Selenium访问。这是意料之中的,不应该有任何解决方法或绕过的方法


如前一个答案中所述,您应该执行普通用户将执行的所有登录步骤。可能是您可以在测试之间重用登录状态,如果假设真实用户也会这样做,您可以使用登录状态。但是,新的登录将给您带来更好的测试结果和信心。

普通用户如何进行身份验证?如果可能的话,您还需要使用Selenium。如果您不进行所需的身份验证,您将无法进入需要身份验证的页面。身份验证机制旨在防止任何未经身份验证的用户。如果您不进行身份验证,这也将阻止Selenium访问。这是预期的,而且确实不应该有任何工作绕过的方法。@eis通常情况下,用户会转到登录页面,填写用户名和密码,如果凭据正确,则会在本地存储中存储jwt令牌。如果本地存储中有有效的jwt令牌,用户可以访问此页面。我是否应该在测试中执行所有这些操作?是的,您应该。您可以也在本地存储中放置一个虚拟令牌,但由于例如到期应由服务器验证,这不应该起作用-因此您需要执行正确的登录步骤。普通用户如何进行身份验证?如果可能,您还需要使用Selenium。如果您不需要,则无法转到需要身份验证的页面ed auth。身份验证机制旨在阻止任何未经身份验证的用户。如果您不进行身份验证,这也将阻止Selenium访问。这是意料之中的,并且确实不应该有任何解决方法或绕过方法。@eis通常情况下,用户会转到登录页,填写用户名和密码,并在本地存储区中填写如果凭据正确,则会存储jwt令牌。如果本地存储中存在有效的jwt令牌,则用户可以访问此页面。我是否应该在测试中执行所有这些操作?是的,您应该这样做。您也可以在本地存储中放置一个虚拟令牌,但由于例如到期应由服务器验证,因此这不应该起作用-因此您可以“您需要执行正确的登录步骤。谢谢您的回答,让我更清楚!谢谢您的回答,让我更清楚!”!