Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как писать тесты на Selenium 
:(
    Опции темы
ОВиталий
Дата 24.10.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



кто нибудь может мне рассказать, как писать тесты на Selenium RC, и как их потом запускать.
не обижусь если мне предложат еще какуюнибудь литеретуру.
PM MAIL   Вверх
polosatij
Дата 25.10.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: нет
Всего: 8




идёшь на офсайт http://selenium.openqa.org/documentation/ и читаешь..  smile 


--------------------
PM   Вверх
Molodec
Дата 6.1.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: нет
Всего: 1



Здравствуйте, у меня возникла идея. Есть ли какие либо библиотеки, для того, чтобы открыть браузер(можно даже в скрытом режиме) и дать ему команду, открыть страницу, нажать на ссылку и прочитать на следующей страницы содержимое текстового поля. Selenium все это позволяет делать, но к сожалению, в виде теста. А я хочу написать программу, которая сделает, допустим, следующие действия:
При нажатии на кнопку она откроет браузер, зайдет на сайт, пройдет по ссылку, прочтет текстовое поле с одним ID, запишет его в элемент формы. Далее прочтет текстовое поле с другим ID и также запишет его в элемент формы. То есть, чтобы это было обычное настольное приложение работающее с сетью и могло выполнять подобные действия. Что можете посоветовать?
Заранее благодарен.  
PM MAIL   Вверх
_Y_
Дата 6.1.2011, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Molodec, я для таких дел всегда писал свой код. Открываю вебстраничку, делаю парсинг - нахожу данные, из которых надо построить зарос на следующую страничку.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Molodec
Дата 6.1.2011, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: нет
Всего: 1



_Y_, вот вот, мне вот это как раз и интересно. С помощью каких средств Вы открываете, выполняете парсинг, посылаете запрос? Можете название либо ссылку дать, где об этих средствах можно почитать?
PM MAIL   Вверх
priam220
Дата 6.1.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: нет
Всего: 8



Добавлено @ 16:23
Цитата

Selenium все это позволяет делать, но к сожалению, в виде теста. 

Почему в виде теста? В виде теста вы можете это оформить, если захотите. Это полноценная библиотека, как мне кажется, позволяющая собрать все что вам нужно, причем самыми изощренными способами. Например, сервер будет подыматься на удаленной машине, а инфу получать вы будите на локальной.
Правда, это будет наверное ресурсоемко, для поставленной задачи и медленно.   В jdk есть средства (URLConnection, например), позволяющие послать запрос на хост, и получить ответ. Ответ можно пропарсить (regexp, например). Это будет куда быстрее и проще.



Это сообщение отредактировал(а) priam220 - 7.1.2011, 15:46
PM MAIL   Вверх
_Y_
Дата 6.1.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Molodec, вот код с какого-то сайта (забыл я уже откуда взял к своему стыду) -хорошо показывает как посылать запрос к серверу:

Код

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;

public class HTTPRequestPoster
{
    /**
     * Sends an HTTP GET request to a url
     *
     * @param endpoint - The URL of the server. (Example: " http://www.yahoo.com/search")
     * @param requestParameters - all the request parameters (Example: "param1=val1&param2=val2"). Note: This method will add the question mark (?) to the request - DO NOT add it yourself
     * @return - The response from the end point
     */
    public static String sendGetRequest(String endpoint, String requestParameters){
        
        BarcodingBaltic.logLink(endpoint);
        System.out.println(endpoint);

        
        String result = null;
        if (endpoint.startsWith("http://"))
        {
            // Send a GET request to the servlet
            try
            {
                // Construct data
                StringBuffer data = new StringBuffer();
        
                // Send data
                String urlStr = endpoint;
                if (requestParameters != null && requestParameters.length () > 0)
                {
                    urlStr += "?" + requestParameters;
                }
                
                System.out.println(urlStr);
                
                URL url = new URL(urlStr);
                URLConnection conn = url.openConnection ();

                // Get the response
                BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while ((line = rd.readLine()) != null)
                {
                    sb.append(line);
                }
                rd.close();
                result = sb.toString();
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * Reads data from the data reader and posts it to a server via POST request.
     * data - The data you want to send
     * endpoint - The server's address
     * output - writes the server's response to output
     * @throws Exception
     */
    public static void postData(Reader data, URL endpoint, Writer output) throws Exception
    {
        HttpURLConnection urlc = null;
        try
        {
            urlc = (HttpURLConnection) endpoint.openConnection();
            try
            {
                urlc.setRequestMethod("POST");
            } catch (ProtocolException e)
            {
                throw new Exception("Shouldn't happen: HttpURLConnection doesn't support POST??", e);
            }
            urlc.setDoOutput(true);
            urlc.setDoInput(true);
            urlc.setUseCaches(false);
            urlc.setAllowUserInteraction(false);
            urlc.setRequestProperty("Content-type", "text/xml; charset=" + "UTF-8");

            OutputStream out = urlc.getOutputStream();

            try
            {
                Writer writer = new OutputStreamWriter(out, "UTF-8");
                pipe(data, writer);
                writer.close();
            } catch (IOException e)
            {
                throw new Exception("IOException while posting data", e);
            } finally
            {
                if (out != null)
                    out.close();
            }

            InputStream in = urlc.getInputStream();
            try
            {
                Reader reader = new InputStreamReader(in);
                pipe(reader, output);
                reader.close();
            } catch (IOException e)
            {
                throw new Exception("IOException while reading response", e);
            } finally
            {
                if (in != null)
                    in.close();
            }

        } catch (IOException e)
        {
            throw new Exception("Connection error (is server running at " + endpoint + " ?): " + e);
        } finally
        {
            if (urlc != null)
                urlc.disconnect();
        }
    }

    /**
     * Pipes everything from the reader to the writer via a buffer
     */
    private static void pipe(Reader reader, Writer writer) throws IOException
    {
        char[] buf = new char[1024];
        int read = 0;
        while ((read = reader.read(buf)) >= 0)
        {
            writer.write(buf, 0, read);
        }
        writer.flush();
    }

}


Парсинг полученной HTML страницы можно делать, представляя страницу в виде какого-нибудь подходящего HTML объекта. Но, по моему опыту, это ненужные заморочки. Линк и два-три значения, которые нужно найти на странице, чтобы сформировать следующий запрос, проще найти в тексте HTML документа, предтавленном в виде String или StringBuffer. Самыми обычными методами indexOf  и/или split. Решение идеологически невыдержанное, зато быстрое и прекрасно работающее даже с битыми HTML страницами (если, конечно, на них имеется нужная информация smile ).




--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
powerOn
Дата 7.1.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Для работы с HTTP мне очень нравится клиентская библиотека Jersey. Например GET запрос:

Код

Client client = Client.create();
WebResource resource = client.resource(“http://localhost:8080/someresource”);
String pageText = resource.get(String.class);


Или с проверкой HTTP статус кода и query параметрами:

Код

Client client = Client.create();
WebResource resource = client.resource(“http://localhost:8080/someresource”);
ClientResponse response = resource.queryParam("someKey", "someValue").get(ClientResponse.class);
Assert.assertEquals(response.getStatus(), Response.Status.FORBIDDEN.getStatusCode());
String pageText = response.getEntity(String.class);


Там еще много всяких вкусностей, подробнее в доке Jersey Client API
 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Molodec
Дата 7.1.2011, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: нет
Всего: 1



Спасибо, ребята! Для проверки данных как раз то, что надо!  smile 
А есть ли что-то для того, чтобы ввести логин и пароль на сайте? По крайней мере Selenium это может. Главное знать id элементов...
PM MAIL   Вверх
priam220
Дата 7.1.2011, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: нет
Всего: 8



Цитата(Molodec @  7.1.2011,  15:16 Найти цитируемый пост)
По крайней мере Selenium это может

селениуму все равно что тыкать и что вводить. будь это пароль или что то другое. Специальных каких то функций для пароля, там нет. 
Установи httpfox плагин. Он поможет тебе сформировать правильно запрос.

Это сообщение отредактировал(а) priam220 - 7.1.2011, 15:41
PM MAIL   Вверх
Molodec
Дата 10.1.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: нет
Всего: 1



Цитата(priam220 @  7.1.2011,  15:41 Найти цитируемый пост)
Установи httpfox плагин. Он поможет тебе сформировать правильно запрос.

Спасибо. Я посмотрю. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.