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

如何使用Selenium 2发送http RequestHeader?

鲜于岳
2023-03-14
问题内容

我需要发送带有一些修改后的标头的Http请求。在尝试寻找与Selenium.addCustomRequestHeaderSelenium 2
的Selenium RC等效的方法几个小时后,我放弃了JavaScript并将其用于我的目的。我期望这会容易得多!

有人知道更好的方法吗?

这是我所做的:

javascript.js

var test = {
    "sendHttpHeaders": function(dst, header1Name, header1Val, header2Name, header2Val) {
        var http = new XMLHttpRequest();

        http.open("GET", dst, "false");
        http.setRequestHeader(header1Name,header1Val);
        http.setRequestHeader(header2Name,header2Val);
        http.send(null);
    }
}

MyTest.java

// ...

@Test
public void testFirstLogin() throws Exception {
    WebDriver driver = new FirefoxDriver();

    String url = System.getProperty(Constants.URL_PROPERTY_NAME);
    driver.get(url);

    // Using javascript to send http headers
    String scriptResource = this.getClass().getPackage().getName()
        .replace(".", "/") + "/javascript.js";

    String script = getFromResource(scriptResource)
            + "test.sendHttpHeaders(\"" + url + "\", \"" + h1Name
            + "\", \"" + h1Val + "\", \"" + h2Name + "\", \"" + h2Val + "\");";
    LOG.debug("script: " + script);

    ((JavascriptExecutor)driver).executeScript(loginScript);

    // ...
}

// I don't like mixing js with my code. I've written this utility method to get
// the js from the classpath
/**
 * @param src name of a resource that must be available from the classpath
 * @return new string with the contents of the resource
 * @throws IOException if resource not found
 */
public static String getFromResource(String src) throws IOException {
    InputStream is = Thread.currentThread().getContextClassLoader().
            getResourceAsStream(src);
    if (null == is) {
        throw new IOException("Resource " + src + " not found.");
    }
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);

    String line = null;
    int nLines = 0;
    while (null != (line = br.readLine())) {
        pw.println(line);
        nLines ++;
    }
    LOG.info("Resource " + src + " successfully copied into String (" + nLines + " lines copied).");
    return sw.toString();
}

// ...

注意:为了简化本文,我已经编辑了原始代码。希望我没有介绍任何错误!


问题答案:

不幸的是,您无法使用Selenium 2更改标头。这是团队方面的明智决定,因为我们正在尝试创建一个模拟用户可以执行的浏览器自动化框架。



 类似资料:
  • 问题内容: 我正在尝试使用Actions.sendKeys发送快捷方式,但是它不起作用。 问题答案: 您可以检查有关此问题的信息- 按下(Ctrl + A)SeleniumWebDriver 检查使用 和弦方法 的答案,您可以执行以下操作-

  • 问题内容: 我有一个REST端点为: 当我尝试以以下方式访问时: 我的~/Downloads/cookies.txt位置: 服务器什么也没收到: 问题答案: 这为我工作: 我可以使用查看后端的值

  • 问题内容: 我想通过Web应用程序将SMS发送到手机,可以吗?我该怎么做? 问题答案: 您可以使用此免费的Java示例程序使用连接到计算机的GSM调制解调器将PC上的SMS发送到COM端口。您还需要从Sun下载并安装Java comm api。 该程序需要以下Java文件才能运行。 SerialConnection.java(此文件用于从Java程序连接到COM端口) SerialConnecti

  • 问题内容: 每次我运行测试的第一步时,都要登录,然后才进入所需的页面。如果运行此测试,则通常登录操作会花费很多时间。 如何通过登录操作? 使用Java语言的Chrome和Firefox驱动程序。 问题答案: 使用Java API 创建cookie ,如下所示: 使用Python API创建cookie ,如下所示:

  • 问题内容: 因此,大约一个月前,我问了一个有关超级代理和发送文件的问题,但没有任何反应。我仍然喜欢找出使用超级代理的方法。 我可以使用纯Ajax发送文件: 但是,当我在超级代理中尝试相同的操作时,没有任何效果: 谁能告诉我发生了什么事。 问题答案: 这应该工作。

  • 问题内容: 我想编写一个使用Python的smtplib发送电子邮件的程序。我搜索了文档和RFC,但找不到与附件相关的任何内容。因此,我确定我缺少一些更高层次的概念。有人可以告诉我附件在SMTP中的工作方式吗? 问题答案: 您要签出的是模块。它使您可以构建与MIME兼容的邮件,然后通过smtplib发送。

  • 问题内容: 我有一个nodejs应用程序,它可以处理用户的请求并接收我要代理到内部API服务的cookie。如何通过使用节点获取来解决这个问题? 请不要提供超级代理。 问题答案: 您应该能够通过在请求的标头中设置cookie来传递cookie:

  • 我正在使用django后端和CRAO前端。我将jwt刷新令牌保存为http仅cookie: 然后,为了刷新访问令牌,我发送了一个axios请求: 但是,在这种情况下,最初保存的cookie不会由axios发送。然而,在删除httponly属性后,cookies确实会被发送,并且一切正常。