【问题标题】:how-to use addCustomRequestHeader properly如何正确使用 addCustomRequestHeader
【发布时间】:2015-11-20 15:54:34
【问题描述】:

我正在尝试将标头添加到我的 HTTP 特定测试用例的请求中。这非常重要,因为我正在尝试测试一个打算在手机中使用的应用程序。我设法了解了addCustomRequestHeader(String arg0, String arg1) 的方法。不幸的是,我似乎不知道如何正确使用它。

这是我的测试套件:

package testscripts;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.SeleneseTestCase;
import com.thoughtworks.selenium.Selenium;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TCNewspapers extends SeleneseTestCase {

    //Local parameters
    private static final String SELENIUM_SERVER_HOST = "localhost";
    private static final int SELENIUM_SERVER_PORT = 4444;
    private static final String NAVIGATOR = "*firefox";
    private String URL = "http://www.marca.com/";

    Selenium selenium;

    @Before
    public void setUp() throws Exception {
        super.setUp();

        selenium = new DefaultSelenium(SELENIUM_SERVER_HOST,
                SELENIUM_SERVER_PORT,
                NAVIGATOR,
                URL);

        setUp(URL, NAVIGATOR);

        //selenium.start();
        selenium.start("addCustomRequestHeader=true");
        //selenium.start("captureNetworkTraffic=true, addCustomRequestHeader=true");
        Thread.sleep(5000);
        selenium.windowMaximize();
    }

    @Test
    public void testOpenMarcaMobilePage() {

        selenium.addCustomRequestHeader("user-agent", "Mozilla/5.0 (iPhone;");
        selenium.open(URL);
        selenium.waitForPageToLoad("300000");
        verifyTrue(selenium.isTextPresent("Golf"));
    }

    @After
    public void stopClient () throws Exception {
        selenium.stop();
    }

}

测试用例正在通过,尽管“Golf”字符串不应出现在移动版页面中。检查导航器时,我发现我不在移动版本中。

另外,我收到了这个警告:

警告:getString(addCustomRequestHeader) 看到错误的结果正常

addCustomRequestHeader 方法的文档说:

这仅在浏览器配置为使用内置 Selenium 代理时才有效

我想这就是问题所在。知道我该怎么做吗?

【问题讨论】:

    标签: java selenium selenium-rc


    【解决方案1】:

    我开始的地方和你不同,但结果和你一样; “如何向 selenium 添加请求标头”。我知道您发布原始问题已经有一段时间了,所以这适用于任何正在寻找 Java 答案的人。这是我想出的一些代码,用于在 JAVA 中将请求标头添加到您的 selenium 请求中:

    public class MyTestCase extends SeleneseTestCase {
    
    @Before
    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://localhost");
        selenium.start("addCustomRequestHeaders=true");
        selenium.open("/");
    }
    
    
    @Test
    public void testMyTestCase() {
        selenium.addCustomRequestHeader("HEADER_NAME", "HEADER_VALUE");
        //header "HEADER_NAME", with "HEADER_VALUE" is now in your request
        selenium.click("link=Hello World");
    }
    

    }

    更新 您还必须使用“-addCustomRequestHeader”输入变量启动您的 selenium 服务器。例如:

    %java_home%\bin\java -jar selenium-server-standalone-2.25.0.jar -addCustomRequestHeader
    

    【讨论】:

    • 这已经在 Selenium RC 2.17a 上测试过
    【解决方案2】:

    您需要确保将 Selenium 用作代理服务器。我写了一篇关于如何使用 addCustomRequestHeader 来支持基本身份验证的文章。您应该能够推断出相关部分(注意我使用的是 Ruby,但它也可以映射到其他语言):

    http://mogotest.com/blog/2010/06/23/how-to-perform-basic-auth-in-selenium

    您非常需要注意的一件事是无法删除请求标头。它始终是附加的,并且会针对每个请求添加。如果您需要使用不同的标头,则需要重新启动 Selenium 服务器。

    【讨论】:

    • 感谢您的回答。我所做的是:将我的 Firefox 设置为通过 Selenium Server (localhost:4444) 连接到 Internet,然后,由于在我的办公室中我通过代理连接到 Internet,我使用选项 -Dhttp.proxyHost=myProxy - 启动了我的 Selenium Server - Dhttp.proxyPort=8080.
    • 虽然它正在工作,但我仍然收到此警告:警告:getString(addCustomRequestHeader) 看到错误的结果 OK
    • 我不熟悉警告信息。但是,你运行的是什么版本的 Selenium?我修复了 2.0a5 或 2.0a6 中的一些请求标头内容。
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2012-07-12
    • 2013-01-21
    • 2021-10-24
    • 2011-12-22
    • 2020-10-14
    • 2015-12-10
    • 2021-01-15
    相关资源
    最近更新 更多