3

ArquillianでJSFをテストしています。

シンプルなボタンは次のようになります。

<h:form id="myForm">
  <a4j:commandLink value="delete" 
   ajaxSingle="true" id="delete"
   action="#{controller.delete(object)}" 
   reRender="something" status="globalStatus" 
   onclick="if(!confirm('do you really wanna delete this?')){return false;}" />
</h:form>

コントローラ機能は次のようになります

delete(Object object){ 
  do something 
}

私のテストはこのように見えます

@RunWith(Arquillian.class)
public class TestCategoryPage extends Browser 

@Test
@RunAsClient
public void delete_test(){
browser.open(URL);
browser.click("id=myForm:cbDelete");
Assert.assertTrue("something", browser.isElementPresent("xpath=//p[contains(text(), 'deleted successfull')]"));

他のすべてのテストは機能していますが、このテストを実行すると、次の例外が発生します。

com.thoughtworks.selenium.SeleniumException:エラー:予期しない確認がありました![本当にこれを削除しますか?] com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:112)

このJavaScriptの確認をキャッチする方法はありますか?ありがとう!

4

3 に答える 3

1

1つのオプションは、Arquillian Grapheneを確認することです:https ://docs.jboss.org/author/display/ARQGRA/Getting+Started

グラフェンには、ajax待機のサポートが組み込まれています。SeleniumAPIのラッパーとして機能します。

于 2012-09-06T08:56:29.157 に答える
1

'deletedsuccessful'メッセージの前に確認ポップアップがあるようです。その場合は、アラートポップアップを処理する必要があります。フォローしてみてください

driver.switchTo().alert().accept();

または、javascript executorを使用して、確認ボックスをオーバーライドすることもできます。

js.executeScript("window.originalConfirm = window.confirm;window.confirm = function(m) { return true; };");
于 2012-09-19T09:26:02.383 に答える
1

基本的に、私はjsexecutorを使用してjsで「ボトルネック」を処理します。

//jsCLick on element function:

public void jsClick(String cssSelector){
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSelector+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());
}

Prashant Shuklaによる叱責のポストを取り上げて、彼はあなたが次のように行動できる適切な考えをあなたに提案しました:

public void jsAlertHandle(){
  JavascriptExecutor js = (JavascriptExecutor) driver;
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("window.confirm;");
            stringBuilder.append("window.confirm = function(m) { return true; };");
            js.executeScript(stringBuilder.toString());
}
jsAlertHandle();

これがあなたにとってより明確になることを願っています)

于 2012-09-20T21:02:02.230 に答える