Selenium PhantomJS在选择组合框时抛出ElementNotVisible,而Firefox正常
我有一个网站,上面有一个组合框,我需要从中选择一个项目。不过这个组合框有点特别,它不是用常规的选项来显示,而是用一些
标签。
所以我需要我的程序先点击这个组合框,然后等一会儿(我发现最好的方法是用implicitly_wait(3),也就是等3秒),然后再点击我需要的那个元素。用Firefox测试的时候一切都很好,但在使用PhantomJS的时候却出现了问题:
Selenium.common.exceptions.ElementNotVisibleException:
Message: 'Error Message => \'Element is not currently visible and may not be manipulated\'
我不太确定问题出在哪里,但我怀疑PhantomJS在使用implicitly_wait的时候没有正确等待,导致它尝试去选择一个不可见的元素。
有没有什么办法可以解决这个问题,而不需要强制让线程休眠呢?
1 个回答
3
没错,你遇到的问题听起来就像我刚刚在一个用户界面测试中解决的那个,真让人烦。这个问题相当复杂,在所有浏览器上都能通过测试,唯独我最喜欢的PhantomJs(速度最快的)不行。
在调试的时候,我能清楚地看到连父元素都设置为可见了。可是我需要点击的那个主要组件却出奇地不可见,原因不是CSS或其他活动样式。
看了Phantom JS的截图后,我才意识到窗口实在是太小了,确实那个用户界面元素在视觉上是看不见的。
你明白我想说什么了吗?
Phantom JS是一个无头浏览器,它不显示窗口,但实际上是有窗口的,而且这个窗口是有大小的。这个异常情况很意外,因为它背后的引擎和Chrome、Safari用的是一样的……理论上应该没问题才对。
不过,最后一切都解决了。试着这样调整你的驱动工厂:
WebDriver driver = new PhantomJSDriver();
driver.manage().window().setSize(new Dimension(800, 600));
return driver;
祝你好运。