小编Gle*_*nnn的帖子

GWT 2.0的硒测试

如何使selenium click()与手动鼠标点击一样工作?

我最近将GWT从1.7.1升级到2.0.一些硒测试(SeleniumRC v1.0.1,IE7)现在失败了.似乎Selenium.click()方法没有选择GWT TreeItem.手动单击将使TreeItem变为蓝色(即,看起来已选中并且在DOM中具有"gwt-TreeItem-selected"类属性),但是selenium测试不会.

我确信硒实际上找到了正确的元素,而不是点击它.如果在click方法中更改字符串参数,则可以检查selenium在找不到元素时抛出异常.

下面的示例代码使用GWT Showcase网站.它试图点击"贝多芬"这个词.如果用鼠标单击该单词,您将看到TreeItem变为蓝色.但是,当你进行硒测试时,它不会.

package test;

import org.junit.Before;
import org.junit.Test;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class TestTreeClick {
    static Selenium selenium = null;

    @Before
    public void setUp() throws Exception {
        if (selenium == null) {
            selenium = new DefaultSelenium("localhost", 4444, "*iexplore",
                    "http://gwt.google.com/samples/Showcase/Showcase.html#CwTree");
            selenium.start();
        }
    }

    @Test
    public void testingClicking() {
        selenium.open("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree");
        selenium.click("gwt-debug-cwTree-staticTree-root-child0-content");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些其他方法(Selenium.clickAt(),Selenium.fireEvent(),Selenium.mouseOver()/ Down()/ Up()) - 但没有重现手动行为.

gwt selenium automated-tests

11
推荐指数
1
解决办法
1万
查看次数

使用Grails的Pre/Post Spring-Security注释

我正在使用Grails Spring-Security插件开发Grails(版本1.3.3)Web应用程序,Spring-Security-Core-1.0.1(反过来,它使用spring-security-3.0.2.RELEASE).

我想为控制器中的操作提供基于Spring-Security注释的访问控制.

我已经能够使用以下注释成功进行基本身份验证:

@Secured("hasAnyRole('ROLE_USER')")
def list = {
...  
}
Run Code Online (Sandbox Code Playgroud)

这样做 - 只向具有ROLE_USER角色的人提供对列表操作/视图的访问.

但是,允许执行某些控制器操作的角色集可能会随时间而变化,并且是系统整体状态的函数.也就是说,允许执行给定操作的角色集可能由服务或域对象方法返回.

我可以做这样的事情的一种方法是使用Spring-Security的"基于表达式的访问控制"(@Pre和@Post注释),类似于Spring Security Documentation中的示例:

 @PreAuthorize("hasPermission(#contact, 'admin')")
 public void deletePermission(Contact contact, Sid recipient, Permission permission);
Run Code Online (Sandbox Code Playgroud)

在用于访问控制决策的该示例中,可以使用#contact语法访问发送到该方法的对象(例如,联系人).

但是,我无法获得@PreAuthorize(或@RolesAllowed)注释来处理Grails控制器操作.如果我用@PreAuthorize(而不是@Secured,如上所述)注释列表操作,我会收到以下错误:

元素FIELD上不允许使用注释@ org.springframework.security.access.prepost.PreAuthorize

这并不奇怪 - 该操作是Groovy闭包(具有可执行代码的字段),而不是方法.但是,我也尝试使用从闭包中调用的方法的注释,如:

  def list = {
    testMethod()
    ....
  }

  @PreAuthorize("hasRole('ROLE_USER')")
  public boolean testMethod(){
    println "testMethod succeess"
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

虽然这不会引发任何错误,但它似乎也没有提供任何访问控制.(无论用户是否具有ROLE_USER,都会打印"testMethod success").

所以,我尝试了一些不同的东西(并阅读了文档),但是还没有能够找到一种使用Grails控制器动作使用@PreAuthorize注释的好方法.这可能吗?在Grails应用程序中是否有更好的方法来使用Spring-Security-Annotations来提供访问控制,这是系统状态的一个功能?

grails spring-security

7
推荐指数
1
解决办法
4307
查看次数

Grails (GORM) 多对一级联删除行为

我一直在努力在一个相对简单的 Grails 项目中产生正确的配置来产生级联删除行为。

假设我有以下简单的域类:

class Author {
    String name
    static constraints = {
    }
}
Run Code Online (Sandbox Code Playgroud)

class Book {
    String title
    Author author
    static constraints = {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我创建了一个作者,然后创建了该作者写的一本书,那么如果不先手动删除该书,我将无法删除该作者。我收到“违反完整性约束”的消息。这并不奇怪,因为 MySQL(我的底层数据库)是由 Grails 创建的,在“book”表的“author”列上将“外键约束”设置为“Restrict”(这种行为与 Grails 的预期一致我理解的文档)。

现在,如果我要手动将 book 表的“author”列上的基础数据库约束从“Restrict”更改为“Cascade”,我会得到我想要的行为。也就是说,如果你删除作者,他们所有的书也会被删除。

所以,我想要做的是更改我的 Grails“Book”类,以在作者列上创建带有“删除级联”的“book”表。我一直在阅读大量有关使用“belongsTo”和显式“映射”进行此类操作和 GORM 默认值的信息。

根据“belongsTo”的文档,这样做的一种方法似乎是将 Book 类中的行从:

Author author
Run Code Online (Sandbox Code Playgroud)

static belongsTo = [author:  Author]
Run Code Online (Sandbox Code Playgroud)

从而明确表明作者是关系的“拥有方”。文档似乎表明这应该生成我所追求的级联删除行为。但是,除非我在 Author 类中添加明确的“hasMany = [books:Book]”,否则它不起作用。我不想这样做。(这个愿望在我的实际业务领域更有意义,但即使只是作为理解练习,我还不明白为什么我必须让 Author 领域类明确了解书籍)。

我只是想要一个 grails 设置来更改 Book 类以在数据库中生成“级联删除”设置,而不必更改 Author 类。我尝试使用显式映射,如:

static mapping = {
        author cascade: 'all'
}
Run Code Online (Sandbox Code Playgroud)

以及与其他显式映射或“belongsTo”选项的组合。这没有用。

注意到对底层 SQL 数据库中“约束”的简单更改提供了我想要的行为,有没有办法通过 Grails …

grails grails-orm belongs-to cascading-deletes

5
推荐指数
1
解决办法
3400
查看次数

如何让 im4java 与 BufferedImage 一起使用

我正在使用im4java版本 1.4.0 访问ImageMagick功能。它非常适合处理文件中的图像。

开发人员指南中有一节介绍使用缓冲图像而不是将输出写入文件,并且有一个测试 (TestCase13) 演示了使用缓冲图像作为输出。但是,当我使用缓冲图像运行任何操作时,我收到一条org.im4java.core.CommandException说明:no ImageReader for given format

我尝试了许多不同的方法(包括添加jai_imageio.jar以提供其他格式),但似乎没有任何效果。显示问题的基本测试代码(基于 im4java.jar 的 TestCase13)是:

@Test
public void shouldWorkWithBufferedImageTest() throws InterruptedException, IOException, IM4JavaException {
    ProcessStarter.setGlobalSearchPath("C:\\Program Files\\ImageMagick-6.8.9-Q8");
    String iImageDir =  "C:\\images";

    String var1 = "png";
    IMOperation imOp = new IMOperation();
    imOp.addImage(new String[]{iImageDir + "sample-image=6.png"});
    imOp.blur(Double.valueOf(2.0D)).paint(Double.valueOf(10.0D));
    imOp.addImage(new String[]{var1 + ":-"});
    ConvertCmd convertCmd = new ConvertCmd();
    Stream2BufferedImage stream2BufferedImage = new Stream2BufferedImage();
    convertCmd.setOutputConsumer(stream2BufferedImage);
    convertCmd.run(imOp, new Object[0]);
    BufferedImage outImage = stream2BufferedImage.getImage();
    ImageIO.write(outImage, "PNG", new …
Run Code Online (Sandbox Code Playgroud)

java imagemagick im4java jmagick

1
推荐指数
1
解决办法
4179
查看次数