Selenium RemoteWebDriver似乎无法识别对Web元素的javascript更改

时间:2013-03-25 22:40:51

标签: java selenium-webdriver selenium-grid remotewebdriver

我一直在尝试在执行一些javascript后测试WebElements的可见性。 WebElements可通过以下xpath找到:

 public static final String MOBILE_APPS_RUNNING_APP_XPATH = "//*[@id='app_slider']/ul/li[1]/a[@class='app nike-running']";
 public static final String MOBILE_APPS_FUELBAND_APP_XPATH = "//*[@id='app_slider']/ul/li[1]/a[@class='app nike-fuelband']";
 public static final String MOBILE_APPS_BASKETBALL_APP_XPATH = "//*[@id='app_slider']/ul/li[1]/a[@class='app nike-basketball']";
 public static final String MOBILE_APPS_TRAINING_APP_XPATH = "//*[@id='app_slider']/ul/li[2]/a[@class='app nike-training']";
 public static final String MOBILE_APPS_KINECT_APP_XPATH = "//*[@id='app_slider']/ul/li[2]/a[@class='app nike-kinect']";
 public static final String MOBILE_APPS_MORE_APPS_XPATH = "//*[@id='app_slider']/ul/li[2]/a[@class='app nike-more']";

页面加载时,前三个元素可见。 javascript函数使元素通过-moz-transform: translate3d(-1084px, 0px, 0px);样式属性进行移位,以便接下来的三个元素变为可见。这适用于本地Firefox浏览器,它可以获取更改,但是当我尝试在网格设置中使用连接到Firefox浏览器的RemoteWebDriver时,元素不再可见。我已经通过屏幕截图验证了这些元素在RemoteWebDriver中仍然可见,但我怀疑这些元素是由RemoteWebDriver缓存的,而不是从更新的DOM中获取的。

有没有办法验证这一点,如果是这样,我如何刷新DOM以便我可以看到元素现在可见?

澄清一下:我在javascript执行后使用driver.findElement(By.xpath(...))方法,我等待元素变得可见,它从来没有。

1 个答案:

答案 0 :(得分:0)

事实证明,selenium-server(和FirefoxDriver)的版本在我的本地机器和网格之间是不同的,即使Firefox的版本在两个环境之间是一致的。在我的本地计算机上(按预期工作)我使用的是selenium-server_2.25.0,而网格使用的是selenium-server_2.28.0(它没有按预期工作)。其中一个产生影响的差异是FirefoxDriver使用Firefox本机事件的变化。我验证了对selenium-server_2.31.0的更新已按预期恢复了功能(和可见性)。