这样,我尝试切换到框架:
driver.switchTo().frame(driver.findElement(By.xpath(("//iframe[contains(@name,'vfFrameId')]//following::iframe[2]"))));
完整的html代码上有三个iframe,我尝试切换到第三个iframe,我也可以使用xpath来定位该iframe,但是在运行脚本驱动程序后无法定位该异常并引发异常
例外:
no such element: Unable to locate element: {"method":"xpath","selector":"//iframe[contains(@name,'vfFrameId')]//following::iframe[2]"}
HTML:
<div class="windowViewMode-normal oneContent active forcePageHost" data-aura-rendered-by="1330:0" data-aura-class="forcePageHost">
<div class="oneAlohaPage" data-aura-rendered-by="1335:0" data-aura-class="oneAlohaPage">
<force-aloha-page data-data-rendering-service-uid="240" data-aura-rendered-by="1338:0" force-aloha-page_aloha-page="">
<div class="slds-template_iframe slds-card" force-aloha-page_aloha-page="">
<iframe height="100%" width="100%" scrolling="yes" allowtransparency="true" id="vfFrameId_1536141890078" name="vfFrameId_1536141890078" allowfullscreen="true" force-aloha-page_aloha-page="" allow="geolocation *; microphone *; camera *" title="Deploy Data Set"></iframe>
</div>
</force-aloha-page>
</div>
</div>
答案 0 :(得分:0)
在这里,您可以找到每个iframe元素的索引
<input type="text" onfocus="myF();" />
<div id="mails">hii</div>
如果您要从iframe切换到iframe,则无法始终正常运行。您可能需要先从List <WebElement> options= driver.findElements(By.tagName("iframe"));
for(WebElement e: options) {
String index=e.getAttribute("index");
System.out.println("Index for: "+e.getAttribute("name")+" is: "+index);// to print out name attribute and index
}
切换到默认内容,然后再切换到iframe(1)
iframe(2)
答案 1 :(得分:0)
我正在根据您的评论进行工作:
,因此您可以在上面的代码中看到浏览器上有三个iframe。发生了什么事情,我单击一个链接然后与元素交互,我必须切换到iframe,在这里我可以切换,但是在单击元素之后,我将导航到下一页,并且在其中引入了另一个iframe我找不到iframe
您需要以下事件顺序:
def freq(L):
st = []
L.sort()
for i in L:
st.append(L.count(i))
print max(st)
实例正在指向此iframe!driver
实例 still 指向步骤1中的iframe!您需要使用driver
将其重置为顶层文档。答案 2 :(得分:0)
根据您共享的基于文本的HTML 和 HTML 快照,尚不清楚是否有多个 iframe 。因此,考虑将此<iframe>
作为唯一的 iframe ,您需要在切换到<iframe>
时按以下步骤诱导 WebDriverWait :
cssSelector
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[id^='vfFrameId_'][name^='vfFrameId_'][title='Deploy Data Set']")));
xpath
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@id,'vfFrameId_')][starts-with(@name,'vfFrameId_')][@title='Deploy Data Set']")));
如果有多个 iframe 可用,它们具有我们上面使用的相同属性,则可以使用以下解决方案:
xpath
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//div[@class='windowViewMode-normal oneContent active forcePageHost' and @data-aura-class='forcePageHost']//following::iframe[1]")));