封闭div时Selenium ElementNotVisibleException应用了变换

时间:2013-07-15 11:14:34

标签: selenium webdriver carousel appmobi

我正在使用英特尔的html5 app development framework。特别是,我正在使用their carousel plugin。但我怀疑webdriver的知识在这里更有用。

他们的旋转木马的工作方式是页面在div内相邻浮动,div的宽度有限且隐藏溢出。您只能通过div“viewport”一次看到其中一个页面。

当你触摸移动到下一个div时,它会应用css变换来动画滑动页面div过去。这很好用。但是webdriver在动画div中的元素有问题。

当您在第一页时,selenium会报告显示的所有元素(在两个页面上),即使其中一半是隐藏的。转换到第二页后,selenium将所有元素(在两个页面上)报告为未显示。

我将它追溯到这个应用于动画div的css属性:

-webkit-transform: translate3d(-1024px, 0px, 0);

当应用这个时,selenium认为这个元素是不可见的。当我使用Chrome开发者工具删除它时,它认为它们都是可见的。

您可以通过两种方式帮助我:

  • 我可以让硒正确报告这些元素的可见性吗?也许通过调整旋转木马的工作方式? (它是开源的)。
  • 我是否可以告诉selenium只是单击该元素,即使它“不可见”?

2 个答案:

答案 0 :(得分:1)

通过解决硒中的错误,解决了这个问题。

new Actions(driver).MoveToElement(element).Click().Perform();

Selenium可以使用此代码点击链接。现在我只需要尝试使用一个最小的例子作为bug报告给硒的维护者......很棘手。

答案 1 :(得分:0)

我发现旋转木马的调整似乎有效,但它可能会以某种我未曾预料到的方式搞乱这种行为。我在moveCSS3中替换了这一行

el.style[$.feat.cssPrefix+"Transform"] = "translate" + translateOpen + distanceToMove.x + "px," + distanceToMove.y + "px" + translateClose;

el.style["margin-left"] = distanceToMove.x + "px";
el.style["margin-top"] = distanceToMove.y + "px";

似乎有用。

欢迎其他答案。这是我应该向硒报告的错误吗?