JavaScript fnction для генерации XPath
XPath/локатор представляет собой способ адресации элемента, перемещаясь по древовидной структуре.
Абсолютный XPath (/):/HTML/тело/DIV [5]/дел [4]
WebElement XPath:
function WebElement_XPath(element) {
if (element.tagName == 'HTML') return '/html';
if (element===document.body) return '/html/body';
// calculate position among siblings
var position = 0;
// Gets all siblings of that element.
var siblings = element.parentNode.childNodes;
for (var i = 0; i < siblings.length; i++) {
var sibling = siblings[i];
// Check Siblink with our element if match then recursively call for its parent element.
if (sibling === element) return WebElement_XPath(element.parentNode)+'/'+element.tagName+'['+(position+1)+']';
// if it is a siblink & element-node then only increments position.
var type = sibling.nodeType;
if (type === 1 && sibling.tagName === element.tagName) position++;
}
}
MouseEvent XPath:
var eventXPath = '';
function MouseEvent_XPath(e) {
event = e.target || e.srcElement ||e.originalTarget;
for (var xpathEle = ''; event && event.nodeType == 1; event = event.parentNode) {
if (event.tagName == 'HTML' || event.tagName == 'html') {
eventXPath = '//html'+xpathEle; break;
}
if (event.tagName == 'BODY' || event.tagName == 'body') {
eventXPath = '//html/body'+xpathEle; break;
}
// calculate position among siblings
var position = 0;
// Gets all siblings of that event.
var siblings = event.parentNode.children;
for (var i = 0; i < siblings.length; i++) {
var sibling = siblings[i];
// Check Sibling with our event if match then recursively call for its parent event.
if (sibling === event) xpathEle = "/"+event.tagName+'['+(position+1)+']'+xpathEle;
// if it is a sibling with same tagName then only increments position.
if (sibling.tagName === event.tagName) position++;
}
}
}
Относительная XPath (//):// DIV [@ ид = 'социально-медиа']/уль/li [3]/а
//Element.TagName[@id="idvalue "и @ class =" classValue "и text() =" innerHTML data "] ИЛИ вы можете использовать. (точка),. является псевдонимом для текста(), если вы знаете, что содержание вы ищете где-то внутри указанного тега, вы можете использовать этот
Пример запуска в консоли [= «innerHTML данные».]:
var xpath = "//div[@id='answer-32201731' and @data-answerid='32201731']";
var element = document.evaluate(xpath, window.document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.style.setProperty('outline', "3px solid blue","important");
Что вы пытаетесь сделать? –
подход к решению проблемы в руке неверен! Не могли бы вы обсудить эту проблему, мы предоставим вам хороший подход к тому, как действовать дальше (не ждите много кода, быстрый Google дает много)! –