回答:
使用できますdocument.evaluate
:
XPath式文字列を評価し、可能であれば指定されたタイプの結果を返します。
これはw3標準化され、文書化されています: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 Dev Toolsでは、以下を実行できます。
$x("some xpath")
chromeコマンドライン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は代わりにselectNodesをサポートしています。
MSDN:https : //msdn.microsoft.com/en-us/library/ms754523(v=vs.85).aspx
スクリーンマップのxpathクエリを開発してテストすることが目的であると想定します。次に、Chromeのデベロッパーツールを使用します。これにより、xpathクエリを実行して一致を表示できます。または、Firefox> 9では、Web Developer Toolsコンソールで同じことを行うことができます。以前のバージョンでは、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[1]
です。 XPath式で錆びている)。同等のDOMはdocument.getElementsByTagName('div')[1]
(または0
)です。