CRUD 操作のためにサーバーに AJAX 要求を行うと、JSON を返す Web アプリケーションがあります。これは、jQuery を使用してページ (MVC) を更新せずにデータを処理するためです。そのため、システムで新しいエントリを作成すると、サーバーは作成されたエントリを JSON 形式で含む応答を返します。jQuery は受信したデータを管理し、(以前に作成されたエントリを使用して) リストにエントリをレンダリングします。
今はHTML Unitでテストしていますが、試してみると
WebResponse response = page.getWebResponse()
200 ステータスと「OK」というメッセージが表示されます。しかし、作成したエントリの JSON データを期待していました。
そして、私が試してみると
page.asText()
現在のページの HTML を取得します (エントリは既にリストに含まれていますが、必要なデータはありません)。
これは、応答がなかったこの問題と同様の問題です: Json ajax call return response 200 ok
PD: jQuery フォームには 2 つのフィールドがあります。1 つは名前のテキスト入力で、もう 1 つは車の設定の選択です。選択する設定のリストをこの関数に渡します。名前は、タイムスタンプと静的 int シードで自動生成されます。これは私が使用しているコードです:
public void create(List<Settings> settings) throws FailingHttpStatusCodeException, MalformedURLException, IOException
{
page = webClient.getPage("localhost:8080/cars/list");
int elementsCount = getEntitiesCount();
creationSeed = elementsCount+1;
HtmlAnchor anchor = (HtmlAnchor) page.getFirstByXPath("//a[@class='action-createCar']");
page = (HtmlPage) anchor.click();
HtmlForm form = page.getFirstByXPath("//form[@class='CarsForm']");
form = page.getForms().get(0);
HtmlTextInput nameField = form.getInputByName("CarsForm-name");
nameField.setText("Test " + creationSeed + " - " + new Date().getTime());
HtmlSelect columnSelectList = (HtmlSelect) form.getSelectByName("CarsForm-settings");
if (settings != null && settings.size() > 0)
for (Settings setting : settings)
{
HtmlOption htmlOption = columnSelectList.getOptionByValue(setting.name());
htmlOption.setSelected(true);
}
//looking for the button to submit the form
HtmlDivision buttonSet = page.getFirstByXPath("//div[@class='ui-dialog-buttonset']");
HtmlButton okButton = (HtmlButton) buttonSet.getFirstElementChild();
page = okButton.click();
assertEquals(elementsCount + 1, getEntitiesCount());
//Here is where I want to get the server response to check the data which is returned by the server
//And neither page.getWebResponse() or page.asText() contains it
}
}