Automation Sikuli间歇性故障

Automation Sikuli间歇性故障,automation,sikuli,Automation,Sikuli,我已经将Sikuli与我的Selenium项目相结合。为了学习,我使用了简单的gmail登录应用程序,使用Sikuli将其自动化。嗯,我能够执行脚本。现在让我们假设,我在我的用户名字段中输入了一些东西。有时,鼠标不会悬停在用户名字段上。所以我的测试脚本失败了。这是间歇性的行为 public static void main(String[] args) throws Exception { Screen screen = new Screen(); Pattern patte

我已经将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);
}

有人知道为什么会发生这种情况吗?

首先,分享你的代码

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

场景中的一个实际示例是在页面完全加载之前尝试检测用户名字段。了解您如何使用这两种工具将非常有用。你用什么导航,用什么标识元素

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

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

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

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

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

要使用的语句是:

wait(pattern1[, seconds])
在以下内容之前插入:

screen.type(pattern1,"email id");
参考资料:

请发布您可以帮助我们调试这种情况的代码,如果您创建了一个新的解决方案,您会遇到同样的问题吗?@haxxxton-我也更新了我的代码。我在这里更新了我的代码。正如我所说,我仍然看到这种断断续续的行为