定位器无法访问网页覆盖上的元素

时间:2017-02-08 07:34:25

标签: java selenium webdriver

我有一个网页,点击链接后会启动。打开的网页会显示一个覆盖屏幕,使前景变得模糊,而前景处于活动状态时则处于非活动状态。但是我无法通过定位器e.t.c找到该叠加层(前景)上的任何元素。 我尝试在该叠加层上定位元素,但仅通过FirePath和firebug选择背景区域边框,嵌入的HTML代码中不存在覆盖屏幕符号。

以下是相同的DOM结构,它突出显示背景页面,但不突出显示叠加前景窗口上的元素。

 <table id="WebPart_twp146520052" cellspacing="0" cellpadding="0" border="0" style="width:100%;">
<tbody>
<tr>
<td>
<div id="TopazWebPartManager1_twp146520052">
<div class="masterWrapper">
<script type="text/javascript"> AC_FL_RunContent( 'codebase','https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','100%','height','100%','src','/MyViewRetirement','quality','high','pluginspage','https://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','/MyViewRetirement','allowFullScreen','true', 'id','MyViewRetirement' );  </script>
<embed width="100%" height="100%" type="application/x-shockwave-flash" allowfullscreen="true" pluginspage="https://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Versi[enter image description here][1]on=ShockwaveFlash" quality="high" src="/MyViewRetirement.swf"/>
</div>
</div>
</td>
</tr>
</tbody>
</table> 

任何人都可以请我这个..

1 个答案:

答案 0 :(得分:0)

试试这个:

String winHandleBefore = driver.getWindowHandle(); 

for (String winHandle : driver.getWindowHandles())
{ 
    driver.switchTo().window(winHandle);

    String bodyText = driver.findElement(By.tagName("body")).getText();

    if (bodyText.contains("Topa‌​zWebPartManager1_twp‌​146520052")) 
    {
        String str_ImageSrc = driver.findElement(By.id("Topa‌​zWebPartManager1_twp‌​146520052")).getAttribute("s‌​rc");

        if (str_ImageSrc.contains(".swf"))
        {
            System.out.println("Flash media recognised, hence closing the window"); 
            linkresult13.add("Fail"); 
            driver.switchTo().window(winHandleBefore);
            break;
        }
    }
}

我希望这对你有用。如果没有,请尝试调试它。 Java不是我的母语。

基本上这将拉取正文文本,查找ID名称,如果它匹配,则会通过ID抓取您要查找的元素,然后查看它是否包含&#34; .swf&#34;。

您可能还想查看此处发布的while和迭代器:WebDriver.getWindowHandle() method