如何使用WebDriver确定元素是否被父样式隐藏

时间:2018-10-02 20:21:49

标签: javascript selenium-webdriver

我正在为使用以下结构的应用程序编写Webdriver自动化:

<html>
  <body>
    <div style="display:block">
      <div class="textDiv">One</div>
    </div>
    <div style="display:none">
      <div class="textDiv">Two</div>
    </div>
    <div style="display:none">
      <div class="textDiv">Three</div>
    </div>
  </body>
</html>

我需要一种方法来查找可见的textDiv。我尝试了以下方法:

  • isDisplayed()。这还不够,因为具有display:block父元素的textDiv元素可能不在屏幕上。
  • getCssValue('visibility')。这是行不通的,因为所有textDivs都返回可见性“可见”。
  • getCssValue('display')。这是行不通的,因为所有textDiv都返回“ block”的显示。
  • getAttribute('style')。这是行不通的,因为所有textDivs都返回'null'样式。

基本上,Webdriver内是否存在另一种方法来确定元素是否由于应用于父元素的样式而显示?

请注意,这是一个简化的示例,其显示设置为none的div可能不是该元素的直接父级。

1 个答案:

答案 0 :(得分:0)

作为对New Contributor的评论的回应,我试图做的是使用确定页面元素是否由于应用于其父元素的样式而从视图中隐藏了。此外,由于这是在Webdriver测试自动化的范围之内,所以我想使用Webdriver功能,或者使用标准Javascript方法失败。

我找到的解决方案如下。 Webdriver命令getRect()返回页面元素的x和y位置及其宽度和高度。如果该元素当前不在屏幕上,但是如果查看了页面的正确区域,则将显示该元素,将返回所有这些值的正整数。如果该元素被父母的样式隐藏,则所有这些元素的值都将为0。如果该元素被其自己的样式隐藏,则宽度和高度将为正整数,但x和y仍为0。

看来,解决此问题的方法是在textDiv元素上调用getRect(),然后对具有getRect()返回的所有非零值的那个元素进行操作。