Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 如何使用Arquillian的JavaScript确认测试按钮点击?_Testing_Selenium_Selenium Webdriver_Jsf 1.2_Jboss Arquillian - Fatal编程技术网

Testing 如何使用Arquillian的JavaScript确认测试按钮点击?

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

我正在用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:错误:出现错误 意外的确认![你真的要删除此吗?]在 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在哪里。从…起