我已经创建了用于使用Robot的Keyboard类。但是当我开始使用这个类中的方法时,我在日志中有错误。
这是我的Keyboard.java
方法pressEscape()
:
public class Keyboard {
private static Robot robot;
private static int time = 1000;
public Keyboard(){
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
public void pressEscape() throws TestException {
if (!getSession().CanRun())
throw new TestException(InvalidStateMessage);
robot.delay(time);
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.delay(time);
robot.keyRelease(KeyEvent.VK_ESCAPE);
robot.delay(time);
}
}
来自日志的错误:
[2015/08/13 15:43:29] [ID:7F4315A] [Selenium]:java.lang.NullPointerException
[2015/08/13 15:43:29] [ID:7F4315A] [Selenium]:在Kodak.AutoTest.Framework.Keyboard.pressEscape(Keyboard.java:128)
改变一点方法:
public void pressEscape() throws TestException {
if (!getSession().CanRun())
throw new TestException(InvalidStateMessage);
try {
new Robot();
robot.setAutoDelay(time);
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.setAutoDelay(time);
robot.keyRelease(KeyEvent.VK_ESCAPE);
} catch (AWTException e) {
e.printStackTrace();
}
}
但在线上仍有相同的错误:
robot.keyPress(KeyEvent.VK_ESCAPE);
答案 0 :(得分:0)
看起来好像唯一可以在该方法中实际获得空指针异常的地方是:
if (!getSession().CanRun())
如果getSession()
返回null
,则会抛出NPE。实际上另一种选择是,如果您未能初始化robot
,那么您将在日志中看到AWTException
。
但是你应该通过查看日志给你的行号来确认这一点。如果这是对的,我建议改变
if (!getSession().CanRun())
throw new TestException(InvalidStateMessage);
到
Session session = getSession();
if ((session==null) || !session.CanRun())
throw new TestException(InvalidStateMessage);
这将使该部分变硬,并且如果会话为空,则意味着您将获得TestException
。 (我猜测getSession()
返回的类型。)
此外,虽然您在构造函数中初始化robot
,但您应该知道它是一个静态字段。这意味着如果你有很多Keyboard
个实例,那么每次创建一个实例时,它都会用新的实例覆盖robot
的前一个实例,因为它们都共享同一个实例。
您应该将其更改为实例字段(删除static
修饰符),或者只将其初始化一次(检查它是否为空,并且仅在初始化时)。
答案 1 :(得分:0)
为了实现这一点,您的public function widgets_with_selected($banner_id)
{
return $this->belongsToMany('App\Models\Widget', 'zone_has_widgets')
->leftJoin('banner_has_widgets', function($join) use($banner_id) {
$join->on('widgets.id', '=', 'banner_has_widgets.widget_id')
->where('banner_has_widgets.banner_id', '=', $banner_id);
})
->select('widgets.*', 'banner_has_widgets.banner_id');
}
变量在第128行应为空。只有robot
才会发生异常。检查您的日志以查看是否是这种情况。另请参阅MadProgrammer对您的问题的评论并对其采取行动。
答案 2 :(得分:0)
现在正在运行,这是完整的代码:
EMEA 100
UK 50
France 50