如何在Java上使用Selenium WebDriver从json调用(Post,Get,JSON)中获取任何值?

时间:2014-06-12 12:18:27

标签: java json selenium-webdriver

我有以下功能:我通过用户表单创建一个新用户。在我提交输入的数据后,创建的用户获得条形码,该条形码将用于通过使用手持扫描器扫描条形码来访问其他系统部分。那么我怎么能得到任何价值(在我的情况下,json调用条形码(Post,Get,JSON)与Selenium WebDriver在Java上?

2 个答案:

答案 0 :(得分:1)

Selenium与json无关。您可以使用 Apache HttpClient库发送 GET,POST,PUT和DELETE 请求并接收响应。下面给出了所有情况的简化函数。

public static HttpResponse sendRequest(String requestType, String body,String url,
        String... headers) throws Exception {
    try {

        HttpGet getRequest = null;
        HttpPost postRequest;
        HttpPut putRequest;
        HttpDelete delRequest;
        HttpResponse response = null;
        HttpClient client = new DefaultHttpClient();

        // Collecting Headers
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        for (String arg : headers) {

//Considering that you are applying header name and values in String format like this "Header1,Value1"

            nvps.add(new BasicNameValuePair(arg.split(",")[0], arg
                    .split(",")[1]));
        }
        System.out.println("Total Headers Supplied " + nvps.size());

        if (requestType.equalsIgnoreCase("GET")) {
            getRequest = new HttpGet(url);
            for (NameValuePair h : nvps) {
                getRequest.addHeader(h.getName(), h.getValue());
            }
            response = client.execute(getRequest);
        }

        if (requestType.equalsIgnoreCase("POST")) {
            postRequest = new HttpPost(url);
            for (NameValuePair h : nvps) {
                postRequest.addHeader(h.getName(), h.getValue());       
            }

            StringEntity requestEntity = new StringEntity(body,"UTF-8");
            postRequest.setEntity(requestEntity);
            response = client.execute(postRequest);
        }

        if (requestType.equalsIgnoreCase("PUT")) {
            putRequest = new HttpPut(url);
            for (NameValuePair h : nvps) {
                putRequest.addHeader(h.getName(), h.getValue());
            }
            StringEntity requestEntity = new StringEntity(body,"UTF-8");
            putRequest.setEntity(requestEntity);
            response = client.execute(putRequest);
        }

        if (requestType.equalsIgnoreCase("DELETE")) {
            delRequest = new HttpDelete(url);
            for (NameValuePair h : nvps) {
                delRequest.addHeader(h.getName(), h.getValue());
            }
            response = client.execute(delRequest);
        }

        return response;

    } catch (Exception e) {
        e.printStackTrace();
        throw e;
    }
}

答案 1 :(得分:0)

Selenium仅处理浏览器。 Java具有执行http请求的类。

请参阅以下代码:

  private HttpURLConnection setODataConnection(String url, String method) {
    try {
      URL obj = new URL(url);
      HttpURLConnection conn = (HttpURLConnection) obj.openConnection();

      conn.setRequestMethod(method);

      // add request header
      conn.setRequestProperty("Content-Type", "application/json");
      conn.setRequestProperty("Accept", "application/json;odata=verbose");
      return conn;
    } catch (Exception e) {
      Assert.fail(e.getMessage());
      return null;
    }
  }

  private StringBuilder sendODataRequest(HttpURLConnection conn) {
    try {
      int responseCode = conn.getResponseCode();
      String method = conn.getRequestMethod();
      System.out.println("\nSending '" + method + "' request to URL : " + conn.getURL());
      System.out.println("Response Code : " + responseCode);

      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
      String inputLine;
      StringBuilder response = new StringBuilder();

      while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
      }
      in.close();
      return response;
    } catch (Exception e) {
      Assert.fail(e.getMessage());
      return null;
    }
  }

  private ArrayList<String> getByFullUrl(String fullUrl, String entity) {
    HttpURLConnection conn = setODataConnection(fullUrl, "GET");
    StringBuilder response = sendODataRequest(conn);

    ArrayList<String> s = new ArrayList<String>();
    Pattern p = Pattern.compile(entity + "\" : (.*?)\\}");

    Matcher m = p.matcher(response);
    while (m.find()) {
      s.add(m.group(1).replace("\"", ""));
    }

    return s;
  }

  public ArrayList<String> get(String table, String entity) {
    String url = oDataUrl + table + "?$select=" + entity;
    return getByFullUrl(url, entity);
  }


  public void post(String table, String bodyDetails) {
    String url = oDataUrl + table;
    HttpURLConnection conn = setODataConnection(url, "POST");

    conn.setDoOutput(true);
    try {
      DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
      wr.writeBytes("details={" + bodyDetails + "}");
      wr.flush();
      wr.close();
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }

    sendODataRequest(conn);
  }

  public void put(String table, String id, String bodyDetails) {
    String url = oDataUrl + table + "(" + id + ")";
    HttpURLConnection conn = setODataConnection(url, "PUT");

    conn.setDoOutput(true);
    try {
      DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
      wr.writeBytes("details={" + bodyDetails + "}");
      wr.flush();
      wr.close();
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }

    sendODataRequest(conn);
  }