我正在使用 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>
Controller 函数看起来像这样
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: ERROR: There was an unexpected Confirmation! [do you really wanna delete this?] at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:112)
有什么方法可以捕捉到这个 javascript 确认信息吗? 谢谢!
最佳答案
好吧,基本上我使用 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 的 condiration 帖子,他建议您可以按照以下方式操作:
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();
希望现在这对你来说变得更清楚了)
关于testing - 我如何使用 Arquillian 测试带有 JavaScript 确认的按钮单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12280734/