【问题标题】:Intermittent failure of Sikuli斯库里间歇性故障
【发布时间】:2017-04-13 02:05:48
【问题描述】:

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

有人知道为什么会这样吗?

【问题讨论】:

  • 请发布您可以帮助我们调试这种情况的代码,如果您创建jsfiddle.net,您会遇到同样的问题吗?
  • @haxxxton - 我也更新了我的代码

标签: automation sikuli


【解决方案1】:

首先,分享你的代码。

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

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

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

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

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

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

【讨论】:

  • 我在这里更新了我的代码。正如我所说,我仍然看到这种间歇性行为
【解决方案2】:

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

要使用的语句是:

wait(pattern1[, seconds])

在前面插入:

screen.type(pattern1,"email id");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多