Pytanie w sprawie post, forms, request, testing, selenium – Dokonywanie żądania POST w Selenium bez wypełniania formularza?

10

Mam aplikację A, która powinna obsługiwać formularz złożony za pomocą metody POST. Rzeczywista forma, która inicjuje żądanie, znajduje się w całkowicie oddzielnej aplikacji B. Testuję aplikację A przy użyciu Selenium i lubię pisać przypadek testowy do obsługi przesyłania formularza.

Jak to zrobić? Czy w ogóle można to zrobić w Selenium? Aplikacja A nie ma formularza, który może zainicjować to żądanie.

Zauważ, że żądanie musi korzystać z POST, w przeciwnym razie mógłbym użyć metody WebDriver.get (url).

Dlaczego nie wypełnisz formularza selenem i nie prześlesz formularza i upewnisz się, że otrzymasz odpowiednie dane po zakończeniu wykonywania. Jeśli jednak aplikacja B nie działa, test zawsze kończy się niepowodzeniem - innymi słowy, myślę, że trzeba wyszydzić tę interakcję. Scott
@Scott: Nie będę miał dostępu do aplikacji B, w której będzie formularz. Juha Syrjälä
wydaje się, że jedynym sposobem na to jest wyszydzenie formularza z aplikacji, do której masz dostęp, w przeciwnym razie selen nie ma większego sensu w tym kontekście. Scott
Myślę, że szyderstwo formy jest najlepszym sposobem. Możesz nawet tworzyć ten formularz dynamicznie za pomocą JavaScript neoascetic

Twoja odpowiedź

2   odpowiedź
4

że to możliwe dzięki Selenium. Nie ma możliwości utworzenia żądania POST z niczego za pomocą przeglądarki internetowej, a Selenium działa poprzez manipulowanie przeglądarkami internetowymi. Sugeruję, aby zamiast tego użyć biblioteki HTTP do wysłania żądania POST i uruchomić to obok testów Selenium. (Jakiego języka / platformy testowej używasz?)

Java + JUnit. Mogę wykonać żądanie POST przy użyciu innych narzędzi, ale jak mogę uczynić Selenium przetwarzającym odpowiedź? Juha Syrjälä
5

programowo prześlij formularz.

Najprostsza realizacja JS z Selenium Java:

<code>if (driver instanceof JavascriptExecutor) {
    ((JavascriptExecutor) driver).executeScript("alert('hello world');");
}
</code>

i za pomocą Javascript możesz utworzyć żądanie POST, ustawić wymagane parametry i nagłówki HTTP i przesłać je.

<code>var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://httpbin.org/post', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
    alert(this.responseText);
};

xhr.send('login=test&password=test');
</code>

Jeśli musisz przejść do selenu, wtedy tekst odpowiedzi zamiastalert(this.responseText) posługiwać sięreturn this.responseText i przypisz wynikexecuteScript () do zmiennej java.

Oto pełny przykład dla pythona:

<code>from selenium import webdriver

driver = webdriver.Chrome()

js = '''var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://httpbin.org/post', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
    alert(this.responseText);
};

xhr.send('login=test&password=test');'''

driver.execute_script(js)
</code>

UWAGA: Jeśli musisz przekazać argumenty string do javascript, upewnij się, że zawsze unikasz ichjson.dumps(myString) w przeciwnym razie twoje js zostanie przerwane, gdy ciąg zawiera pojedyncze lub podwójne cudzysłowy lub inne trudne znaki.

Powiązane pytania