首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java实现Selenium中的锁?

如何用Java实现Selenium中的锁?
EN

Stack Exchange QA用户
提问于 2016-07-27 12:19:40
回答 3查看 920关注 0票数 3

只有在上一个脚本(即Openfile.exe )已经完成执行时,我才希望该脚本为CreateNew.exe

现在发生的事情是,当我运行TestNG.xml文件时,它按优先顺序运行所有@Test,在5秒内TestNg输出控制台显示所有@Test都被传递。

而我的AutoIT脚本仍然在后台并行运行。

守则如下:

代码语言:javascript
复制
@Test (priority=1)
public void CreateNew() throws Exception
{       
    Runtime.getRuntime().exec("exeFiles\\CreateNew.exe");       
}

@Test (priority=2)
public void OpenaFile() throws Exception
{
        Runtime.getRuntime().exec("exeFiles\\OpenaFile.exe");
}

AutoIt文件的代码如下:

代码语言:javascript
复制
createnew()

Func createnew()
    Sleep(2000)
    Run("Mspaint.exe")
    WinWaitActive("Untitled - Paint")
    Send("!f")
    Sleep(1000)
    Send("n")
    Sleep(2000)
    WinClose("Untitled - Paint")
EndFunc   ;==>createnew

解决这一问题的可能办法是:

  • 在Java/Selenium代码中创建一个临时锁文件
  • 启动Autoit.exe
  • 在Java/Selenium代码中编写一个循环来检查锁文件是否仍然存在
  • AutoIt代码中的最后一步移除锁文件
  • 如果锁文件不存在,则中断循环,然后继续下一段代码

现在有人知道如何在代码中创建和使用这个锁文件了吗?

EN

回答 3

Stack Exchange QA用户

回答已采纳

发布于 2016-07-27 15:07:38

我的回答借用了NarendraC的答案。

代码语言:javascript
复制
@Test (priority=1)
public void CreateNew() throws Exception
{       
    Process p = Runtime.getRuntime().exec("exeFiles\\CreateNew.exe");
    p.waitFor();       
}

@Test (priority=2, dependsOnMethods={"CreateNew"})
public void OpenaFile() throws Exception
{
        Runtime.getRuntime().exec("exeFiles\\OpenaFile.exe");
}

据我所知,问题是第一种方法在完成之前就已经退出了。通过将等待添加到进程中,它将等待它结束。我相信这会给你想要的结果。

票数 6
EN

Stack Exchange QA用户

发布于 2016-07-27 12:58:05

即使你不能尝试"dependsOnMethods",这在这个意义上也是有用的。

请查看下面的示例以供使用:

代码语言:javascript
复制
@Test (priority=2, dependsOnMethods={"CreateNew"})
票数 1
EN

Stack Exchange QA用户

发布于 2016-07-27 12:38:08

我认为一种更好(尽管更复杂)的方法是使用消息队列和发布/订阅模型来代替线程睡眠。

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/20753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档