当前位置: 首页 > 面试题库 >

selenium测试运行不会保存cookie?

南宫云
2023-03-14
问题内容

因此,我正在尝试Selenium自动化,并且试图编写一个测试用例,该用例可以登录,转到特定页面,输入数据,然后按Submit。问题在于,它运行时会键入凭据,然后按“提交”,网站将返回:

该站点使用HTTP cookie来验证授权信息。请启用HTTP cookie以继续。

但是,当我添加此行[以// 1表示]时:

driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();

它允许登录通过,直到到达发送消息页面[以//
2表示],然后再次要求提供凭据(就像从未登录过一样)。那么,Firefox根本不接受Cookie吗?我该如何解决?

资源:

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class LaPwn {
    private WebDriver driver;
    private String baseUrl;
    private boolean acceptNextAlert = true;
    private StringBuffer verificationErrors = new StringBuffer();
    private String UserID = "";
    private String UserPW = "";
    private String UserPIN = "";

    public static void main(String[] args) throws Exception {

        UserInfo User = new UserInfo();

        User.setUserInfo();

        System.out.println(User.getUserID());
        System.out.println(User.getUserPW());
        System.out.println(User.getUserPIN());


        JUnitCore.main("LaPwn");
    }

    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "https://my_url.com";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testLaPwn() throws Exception {
        driver.get(baseUrl + "/Login");
        //1
        driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();
        //1
        driver.findElement(By.id("UserID")).clear();
        driver.findElement(By.id("UserID")).sendKeys("User.getUserID()");
        driver.findElement(By.name("PIN")).clear();
        driver.findElement(By.name("PIN")).sendKeys("User.getUserPW()");
        driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();
        driver.findElement(By.id("apin_id")).sendKeys("User.getUserPIN()");
        driver.findElement(By.cssSelector("div.pagebodydiv > form > input[type=\"submit\"]")).click();

        //2
        driver.get(baseUrl + "/messagecenter");
        //2
        try {
            assertEquals("Send message:", driver.getTitle());
        } catch (Error e) {
            verificationErrors.append(e.toString());
        }
        driver.findElement(By.id("user")).clear();
        driver.findElement(By.id("user")).sendKeys("test123");
        driver.findElement(By.id("messg")).clear();
        driver.findElement(By.id("messg")).sendKeys("Hello test123!");
        driver.findElement(By.xpath("(//input[@name='SEND_BTN'])[2]")).click();
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

    private boolean isElementPresent(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }

    private boolean isAlertPresent() {
        try {
            driver.switchTo().alert();
            return true;
        } catch (NoAlertPresentException e) {
            return false;
        }
    }

    private String closeAlertAndGetItsText() {
        try {
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            if (acceptNextAlert) {
                alert.accept();
            } else {
                alert.dismiss();
            }
            return alertText;
        } finally {
            acceptNextAlert = true;
        }
    }
}

问题答案:

根据您的问题陈述,您面临的问题是硒正在打开一个未启用Cookie的新的Firefox配置文件。

driver = new FirefoxDriver();
您必须在此处进行修复,以打开一个启用了Cookie的配置文件。一种方法是在firefox中创建您自己的配置文件并打开该配置文件,而不是通过FirefoxDriver()直接打开;

ProfilesIni profileObj = new ProfilesIni();
FirefoxProfile yourFFProfile = profileObj.getProfile("your profile");
driver = new FirefoxDriver(yourFFProfile);

这样,您可以在该配置文件中进行所需的任何设置,并在该设置下运行测试。如果需要启用Cookie,请在firefox选项中进行。

以下是根据seleniumhq.org打开特定配置文件的另一种方法

File profileDir = new File("path/to/top/level/of/profile");
FirefoxProfile profile = new FirefoxProfile(profileDir);
profile.addAdditionalPreferences(extraPrefs);
WebDriver driver = new FirefoxDriver(profile);

检查源以获取有关此主题的更多信息。来源:http://docs.seleniumhq.org/docs/03_webdriver.jsp#modifying-
the-firefox-
profile



 类似资料:
  • 你好,我正在尝试使用Maven运行一个JUnit测试。 [信息]没有要编译的内容-所有类都是最新的 [信息] [信息]--maven-surefire-plugin:2.10:test(default-test)@uitests-core-- 我不知道为什么它不能运行我的测试。请帮帮我。

  • 我正在使用詹金斯进行测试硒测试。我在本地计算机上运行了测试,它的工作原理。但是当我运行jenkins时,它在远程jkins机器上运行(在远程jkins机器上创建工作区),并且它失败并显示测试错误,例如“元素不可见”或“由于元素不可点击而超时异常”。在此之后,我直接在工作区中的远程计算机(Windows服务器)上运行测试。它启动chrome浏览器并运行测试并通过。 为什么它在运行jenknis时无头

  • 我使用下面的TestNG配置来启用Selenium测试的并行执行。 Java代码: 硒测试预计将并行运行。我希望有2个浏览器打开并运行测试脚本。 但我只看到一个浏览器,所有3个测试都一个接一个地运行,而不是并行运行。我尝试过使用“并行”属性的测试、方法、类和实例选项。 有什么帮助吗?

  • Visual Studio 2019根本没有检测或发现NUNit或MSTest单元测试。我刚在一周前安装了新的。这里是MS指南https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019 有几个线程提供了可能的解决方案,但我尝试过的都没有帮助。我是C#新手,所以很多

  • 问题内容: 我想同时运行多个Selenium测试(在Jenkins服务器上)。 当前,由于ChromeDriver似乎通过特殊端口进行通讯,因此一次仅运行一次测试。因此,以某种方式,我想我必须通过Selenium将某种端口设置传递给ChromeDriver,以启动多个测试。 不幸的是,Selenium网站上的该主题为空:http : //docs.seleniumhq.org/docs/04_we

  • 在我的Gradle项目中,我有一个非常简单的JUnit测试: 当我在IntelliJ中运行测试时,我会得到一个任务列表,其中包含构建成功的消息。例如: 这不应该发生,因为我期待测试失败。我还得到一条消息“测试事件没有收到”。 编辑:添加了项目结构的截图。