1、碰到的问题:
最近在公司用Robot framework+Selenium2Library做项目,碰到部分页面比较长,无法完全显示在屏幕内,需要上下滚动滚动条才能看到下半部分的页面元素。于是呼,问题就来了,当我操作未在屏幕内的”继续”按钮(实际是一个超链接)时,案例失败,提示:
ElementNotVisibleException: Message: u'Cannot click on element'。
HTML代码:
<A id=submitButton title=继续href="javascript:void(0)" >继续>继续</A>
2、解决过程:
a) 起初我以为RF不能识别不在屏幕内的页面元素,咨询同事说可以处理,于是自己又开始研究,发现RF确实可以识别不在幕内的页面元素(比如输入框)。通过先对输入框进行赋值操作后,由于屏幕自己下拉继续按钮已经显示在屏幕内了,于是问题看上去似乎解决了。
b) 然而,好景不长,另一个页面出现了同样的问题而且只有一个继续按钮不在屏幕内(无法使用a中先操作其它元素的办法解决),当案例执行到这一步时我手工把页面下拉使按钮显示出来,这时就不会有问题,于是我断定点击按钮操作时屏幕没有下拉,而RF操作时又必须要元素显示在屏幕内。随即我又开始研究Selenium2Library库,一个一个的看S2L库的关键字,发现了Foucs关键字,于是抱着试一试的心理在点击继续按钮前加上了这个Foucs关键字使焦点定位到按钮上,当执行到这一步时继续按钮出现在屏幕上,问题随之彻底解决,很是开心啊!!!
3、总结:
a) 首先,RF对于不在屏幕内的页面元素是可以识别的,RF定位到不在屏幕内的对象会自行下移屏幕。但是对于点击按钮操作,RF没有自行下移屏幕,所以无法进行操作,要想办法使元素能在屏幕中显示出来,focus关键字就很有用处了,因为它要定位焦点,而且会把屏幕下拉,这样一来不在屏幕内的元素就可以显示进行操作了。
b) Execute Javascript 关键字: 这是S2L库中的一个关键字,可以用来执行JS脚本,我觉得这也可以解决上述问题,有时间在研究研究。