Selenium PhantomJS在选择组合框时抛出ElementNotVisible,而Firefox正常

2 投票
1 回答
911 浏览
提问于 2025-04-18 11:18

我有一个网站,上面有一个组合框,我需要从中选择一个项目。不过这个组合框有点特别,它不是用常规的选项来显示,而是用一些

标签。

所以我需要我的程序先点击这个组合框,然后等一会儿(我发现最好的方法是用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;

祝你好运。

撰写回答