testing - 我如何使用 Arquillian 测试带有 JavaScript 确认的按钮单击?

标签 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 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/

相关文章:

java - driver.get 无法在 Selenium Webdriver、Java 中工作

javascript - 如何找到使用 Javascript 工具提示定义的 Web 元素的 Xpath?

java - 如何使用 Java 代码刷新文件夹?

unit-testing - 为什么始终对尽可能小的代码单元进行单元测试是最佳实践?我发现那些测试永远无法在重构中幸存下来

language-agnostic - 如何进行集成测试?

java - 拖放不适用于 java 中的 chrome webdriver

python - 如何在selenium中分别获取类中的每个元素

django - 如何设置基于 Django 和 Postgresql 的 Web 应用程序的测试副本?

node.js - 通过 Jenkins CI 在 Docker 容器中运行 Selenium 测试的最简单方法

java - 在 Selenium WebDriver 中执行 InternetExplorerDriver 时发生 NoSuchElementException