Sikuli的间歇性失败

时间:2016-11-29 07:10:34

标签: automation sikuli

我已将Sikuli与我的Selenium项目整合在一起。为了学习,我使用简单的gmail登录应用程序使用Sikuli自动化它。好吧,我能够执行脚本。现在让我们说,我在我的用户名字段中输入内容。有时,鼠标不会悬停在用户名字段中。所以我的测试脚本失败了。这是间歇性的行为。

public static void main(String[] args) throws Exception {

    Screen screen = new Screen();

    Pattern pattern1 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\UserName.PNG");
    Pattern pattern2 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Password.PNG");
    Pattern pattern3 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignIn.PNG");
    Pattern pattern4 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Next.PNG");
    Pattern pattern5 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignedIn.PNG");
    Pattern pattern6 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMail.PNG");
    Pattern pattern7 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMessage.PNG");

    System.setProperty("webdriver.chrome.driver","E:\\Projects\\Java\\Demo\\Drivers\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    driver.navigate().to("https://www.gmail.com");
    driver.manage().window().maximize();
    screen.type(pattern1,"email id");
    screen.click(pattern4);
    screen.type(pattern2,"password");
    screen.click(pattern5);
    screen.click(pattern3);
    screen.wait(pattern6,20);
    screen.click(pattern6);
    screen.wait(pattern7,5);
    screen.click(pattern7);
}

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

首先,分享您的代码。

通常,您描述的间歇性行为是由超时引起的。这意味着您正在寻找尚未稳定或尚未稳定的元素。

您的方案中的一个实际示例可能是在页面完全加载之前尝试检测用户名字段。知道如何使用这两种工具将很有用。您用于导航的内容以及元素识别的内容?

说,尝试解决此问题的最快方法是在开始搜索用户名元素之前延迟几秒钟。看看这对你有帮助。

修改 现在,当您发布代码时,请查看以下两行:

driver.manage().window().maximize();
screen.type(pattern1,"email id");

在这里,您最大化浏览器窗口并立即尝试查找并键入pattern1描述的元素。这可能是一个问题,因为您的driver实例不会等待窗口最大化并且下一个命令将立即开始执行。您应该留出一些时间来确保窗口已完成大小调整。只需在这些行之间添加一个短暂的睡眠,看看是否有帮助。

答案 1 :(得分:0)

当它间歇性地发生并且在新绘制的屏幕中的第一个动作发生时,这看起来像是时间问题 这里的Sikuli解决方案是等到输入字段可用后再使用它。

使用的声明是:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
    <deployment>
        <exclusions>
            <module name="org.apache.common.logging"/>
            <module name="org.apache.log4j"/>
            <module name="org.jboss.log4j"/>
            <module name="org.jboss.log4j.logmanager"/>
            <module name="org.jboss.logging"/>
            <module name="org.slf4j"/>
            <module name="org.slf4j.impl"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

在之前插入:

wait(pattern1[, seconds])

参考:
http://doc.sikuli.org/region.html#Region.wait