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