Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定位器无法访问网页覆盖上的元素_Java_Selenium_Webdriver - Fatal编程技术网

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

Java 定位器无法访问网页覆盖上的元素,java,selenium,webdriver,Java,Selenium,Webdriver,我有一个网页,点击一个链接就会启动。打开的网页显示一个覆盖屏幕,当前景处于活动状态时,背景模糊且不活动。但是,我无法通过定位器e.t.c定位覆盖(前景)上的任何元素。 我试着在覆盖层上定位元素,但是背景区域边界只能通过FirePath和firebug进行选择,而嵌入的HTML代码中没有覆盖层屏幕标志 下面是相同的DOM结构,它高亮显示背景页面,但不高亮显示覆盖前景窗口上的元素 <table id="WebPart_twp146520052" cellspacing="0" cellpad

我有一个网页,点击一个链接就会启动。打开的网页显示一个覆盖屏幕,当前景处于活动状态时,背景模糊且不活动。但是,我无法通过定位器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> 

AC_FL_RunContent(‘代码基’,’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“,”电影“,”MyViewRetirement“,”allowFullScreen“,”真“,”id“,”MyViewRetirem”",;
有人能告诉我这个吗?

试试这个:

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抓取您正在查找的元素,然后查看它是否包含“.swf”


您可能还需要查看此处发布的while和迭代器:

请添加您尝试在覆盖上选择元素的代码。String winHandleBefore=driver.getWindowHandle();for(String winHandle:driver.getWindowHandles()){driver.switchTo().window(winHandle);}str_ImageSrc=driver.findElement(By.xpath(“./*[@id='TopazWebPartManager1']/div/embed”).getAttribute(“src”);if(str_ImageSrc.contains(“.swf”){System.out.println(“已识别闪存介质,因此关闭窗口”);linkresult13.add(“失败”);driver.switchTo().window(winHandleBefore);我假设您正在尝试使用for循环遍历WindowHandles。是否只有两个windows句柄?因为如果有3个,而您要查找的是#2,则当它完成for循环时,在获取属性之前,它将切换到#3。您是否尝试通过将它们转储到字符串中来查看有多少个WindowHandles阵列?