Нужна помощь в получении выражения XPath для span внутри всплывающего окна Iframe

#javascript #iframe #xpath

#javascript #iframe #xpath

Вопрос:

Необходимо получить выражение xpath для span внутри iframe. Нужна помощь в получении выражения XPath для span внутри всплывающего окна Iframe.

я могу получить iframe, но получение /html /body внутри iframe не происходит, любая помощь будет оценена

 <div class="gwt-PopupPanelGlass" style="position: absolute; left: 0px; top: 0px; visibility: visible; display: block; width: 1680px; height: 222px;"></div>
<div class="gwt-PopupPanel" style="left: 439px; top: 0px; visibility: visible; position: absolute; overflow: visible;">
<div class="popupContent">
<div class="ph-PopupDialog" style="position: relative; width: 800px; height: 220px;">
<div style="position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex;">amp;nbsp;</div>
<div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;">
<div style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
<div style="position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex;">amp;nbsp;</div>
<div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; height: 32px;">
<div style="position: absolute; overflow: hidden; left: 0px; top: 32px; right: 0px; bottom: 0px;">
<div class="ph-PopupDialog-content" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
<div style="position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex;">amp;nbsp;</div>
<div style="position: absolute; overflow: hidden; left: 5px; top: 5px; right: 5px; bottom: 5px;">
<div style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
<div>
<iframe class="gwt-Frame ph-PaymentFrame" name="paymentFrame" src="javascript:''">
<html>
<head>
<body onload="pageLoaded();">
<div class="ph-View">
<div class="container_24 form-grid">
<div class="container_24 form-grid">
<div class="container_24 form-grid">
<div class="container_24 form-grid">
<div class="container_24 form-grid">
<div class="grid_12">
<div class="ph-ButtonPanel ph-ButtonPanel-undecorated">
<a class="ph-Button ph-Button-button" onclick="submit();return false;" style="float: right; margin-left: 5px;" href="#">
<a class="ph-Button ph-Button-button" onclick="cancel();return false;" style="float: right; margin-left: 5px;" href="#">
<span>Cancel</span>
</a>
</div>
</div>
</div>
</div>
</body>
  

`

Ответ №1:

Элементы в iframe фактически находятся на другой странице. итак, вы должны сначала найти адрес этой страницы, который является значением значения src iframe, и загрузить его, а затем получить доступ к элементу на этой странице.

Ответ №2:

Вам необходимо установить область действия xpath для свойства contentDocument iframe:

 var iframe = document.getElementsByTagName("iframe")[0];
var theFirstSpan = document.evaluate('//span', iframe.contentDocument,
         null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
  

Ответ №3:

Используйте:

 //iframe//span
  

При этом выбирается каждый span элемент, который является потомком любого iframe элемента в документе XML.

Ответ №4:

 //span [ancestor::iframe]
  

При этом будут выбраны все элементы span, которые в какой-то момент имеют элемент iframe-предка.

Ответ №5:

Мы не можем получить доступ к элементам внутри iframe напрямую. Сначала нам нужно переключиться на iframe.

Я использую PHP Facebook webdriver, и это отлично работает для меня:

 $driver->get("http://www.example.com"); // containing an iframe
$iFrame = $driver->findElement(
            WebDriverBy::xpath('//iframe[@name="iFrameName"]') //name or id or whatever by which we can access.
        );
$driver->switchTo()->frame($iFrame);
  

Теперь мы можем получить к нему доступ span как:

 $spanButton = $driver->findElement(
            WebDriverBy::xpath('//span') 
        );