답변:
당신은 사용할 수 있습니다 document.evaluate
:
XPath 표현식 문자열을 평가하고 가능한 경우 지정된 유형의 결과를 리턴합니다.
그것은 표준화 되고 전체적으로 문서화되어 있습니다 : https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
console.log( getElementByXpath("//html[1]/body[1]/div[1]") );
<div>foo</div>
https://gist.github.com/yckart/6351935
mozilla 개발자 네트워크에 대한 훌륭한 소개도 있습니다 : https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate
다음을 사용하는 대체 버전 XPathEvaluator
:
XPathResult.FIRST_ORDERED_NODE_TYPE === 9
developer.mozilla.org/en-US/docs/…
Chrome 개발자 도구에서 다음을 실행할 수 있습니다.
$x("some xpath")
크롬 커맨드 라인 API에서 $ x와 같은 것을 원한다면 (여러 요소를 선택하려면)
var xpath = function(xpathToExecute){
var result = [];
var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){
result.push( nodesSnapshot.snapshotItem(i) );
}
return result;
}
이 MDN 개요는 https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript에 도움이되었습니다.
javascript의 document.evaluate 를 사용 하여 DOM에서 XPath 표현식을 실행할 수 있습니다 . IE 6으로 돌아가는 브라우저에서 어떤 방식 으로든 지원된다고 생각합니다.
MDN : https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
IE는 대신 selectNode 를 지원 합니다.
MSDN : https://msdn.microsoft.com/en-us/library/ms754523(v=vs.85).aspx
목표는 화면 맵에 대한 xpath 쿼리를 개발하고 테스트하는 것입니다. 그런 다음 Chrome 개발자 도구를 사용하십시오 . 이를 통해 xpath 쿼리를 실행하여 일치 항목을 표시 할 수 있습니다. 또는 Firefox> 9에서는 웹 개발자 도구 콘솔을 사용하여 동일한 작업을 수행 할 수 있습니다 . 이전 버전에서는 x-path-finder 또는 Firebug를 사용하십시오 .
public class JSElementLocator {
@Test
public void locateElement() throws InterruptedException{
WebDriver driver = WebDriverProducerFactory.getWebDriver("firefox");
driver.get("https://www.google.co.in/");
WebElement searchbox = null;
Thread.sleep(1000);
searchbox = (WebElement) (((JavascriptExecutor) driver).executeScript("return document.getElementById('lst-ib');", searchbox));
searchbox.sendKeys("hello");
}
}
올바른 로케이터를 사용하고 있는지 확인하십시오.
**Different way to Find Element:**
IEDriver.findElement(By.id("id"));
IEDriver.findElement(By.linkText("linkText"));
IEDriver.findElement(By.xpath("xpath"));
IEDriver.findElement(By.xpath(".//*[@id='id']"));
IEDriver.findElement(By.xpath("//button[contains(.,'button name')]"));
IEDriver.findElement(By.xpath("//a[contains(.,'text name')]"));
IEDriver.findElement(By.xpath("//label[contains(.,'label name')]"));
IEDriver.findElement(By.xpath("//*[contains(text(), 'your text')]");
Check Case Sensitive:
IEDriver.findElement(By.xpath("//*[contains(lower-case(text()),'your text')]");
For exact match:
IEDriver.findElement(By.xpath("//button[text()='your text']");
**Find NG-Element:**
Xpath == //td[contains(@ng-show,'childsegment.AddLocation')]
CssSelector == .sprite.icon-cancel
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
System.setProperty("webdriver.chrome.driver", "path of your chrome exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com");
driver.findElement(By.xpath(".//*[@id='UserName']")).clear();
driver.findElement(By.xpath(".//*[@id='UserName']")).sendKeys(Email);
요점을 알려주기 위해 xapth를 쉽게 사용할 수 있습니다. 아래 코드를 사용하여 정확하고 간단한 방법입니다. 친절하게 피드백을 제공하십시오. 감사합니다.
JavascriptExecutor js = (JavascriptExecutor) driver;
//To click an element
WebElement element=driver.findElement(By.xpath(Xpath));
js.executeScript(("arguments[0].click();", element);
//To gettext
String theTextIWant = (String) js.executeScript("return arguments[0].value;",driver.findElement(By.xpath("//input[@id='display-name']")));
html
및body
DIV에이 BODY의 하위 수 (즉시 또는 깊이)와 BODY는 HTML의 자식이어야해야하기 때문에 선택기가 불필요한, 그래서 문서에서 다른 DIV 요소가없는 제공//DIV[1]
내가 꽤 있어요 불구하고 작동해야이 ( XPath 표현식에 녹슨). DOM에 상응하는 것은document.getElementsByTagName('div')[1]
(또는 아마도0
)입니다.