Testing 如何使用Arquillian的JavaScript确认测试按钮点击?
我正在用Arquillian测试我的JSF 一个简单的按钮如下所示:Testing 如何使用Arquillian的JavaScript确认测试按钮点击?,testing,selenium,selenium-webdriver,jsf-1.2,jboss-arquillian,Testing,Selenium,Selenium Webdriver,Jsf 1.2,Jboss Arquillian,我正在用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
<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:错误:出现错误
意外的确认![你真的要删除此吗?]在
selenium.HttpCommandProcessor.ThrowassertionFailureExceptionError(HttpCommandProcessor.java:112)
是否有任何方法可以捕获此javascript确认?
谢谢 一种选择是研究阿基利石墨烯:
Graphene内置了对ajax的支持。充当Selenium API的包装器。似乎在“deleted successfull”消息之前会弹出一个确认窗口。如果是这种情况,您需要处理弹出的警报。试着跟随
driver.switchTo().alert().accept();
也可以使用javascript executor ot覆盖确认框:
js.executeScript("window.originalConfirm = window.confirm;window.confirm = function(m) { return true; };");
基本上,我使用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();
希望现在你能更清楚地了解这一点)好吧,我会看看石墨烯,但我真的希望Arquillian或Selenium中已经有一个功能,我只是还不知道
Selenium.waitForCondition(javascript,超时)
是Graphene在后台使用的。添加一些可以检测ajax调用何时完成的“随机”javascript。没有webdriver有什么方法可以做到这一点吗?你说js是什么意思。???js在哪里。从…起