1)xPathでfindElementsがどのように機能するかを示すチュートリアルを行っています。属性<div>
を含むid=container
要素に続くすべてのテキストを返す理由を知りたいのですが。
xpathのコード:By.xpath("//div[@id='container']
2)親ノートに続く最初または最初のいくつかのノードを返すようにコードを変更するにはどうすればよいですか。 「ホーム」のような最初のノード、ホーム、手動テスト、自動化テストのような最初のいくつかのノード。
あなたのアドバイスと助けをありがとう!
このチュートリアルのコードフラグメントは次のとおりです。
import Java.util.List;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.firefox.FirefoxDriver;
public class WD_findElements
{
@Test
public void test_byxpath(){
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']"));
System.out.println("Test7 number of elements: " + elements.size());
for(WebElement ele : elements){
//ele.sendKeys("hexbyes");
System.out.println(ele.getText());
//System.out.println(ele.getAttribute("id"));
//System.out.println(ele.getTagName());
}
}
finally {
driver.close();
}
}//end of test_byxpath
public void xpathDemo2() {
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
WebElement webelement = driver.findElement(By.id("container"));
//matching single element with attribute value=container
System.out.println("The id value is: " + webelement.getAttribute("id"));
System.out.println("The tag name is: " + webelement.getTagName());
}
finally {
driver.close();
}
}//end of xpathDemo2
public void xpathDemo3() {
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
//find first child node of div element with attribute=container
List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']/*[1]"));
System.out.println("Test1 number of elements: " + elements.size());
for(WebElement ele : elements){
System.out.println(ele.getTagName());
System.out.println(ele.getAttribute("id"));
System.out.println("");
System.out.println("");
}
}
finally {
driver.close();
}
}//end of xpathDemo3
}
あなたの質問:
Q 1.)divに続くすべてのテキストを返す理由を知りたいのですが?
それはすべきではなく、私はそうは思わないでしょう。 'id'属性値が 'containter'(およびこの子)と等しいすべてのdivを返します。しかし、ele.getText()
を使用して結果を出力しています。getTextは、結果のすべての子のすべてのテキストコンテンツを返します。
この要素の目に見える(つまり、CSSによって非表示にされていない)innerTextを取得します。
戻り値:
この要素のinnerText。
Q 2.)親ノートに続く最初または最初のいくつかのノードを返すようにコードを変更するにはどうすればよいですか
これはあなたが何を探しているのか本当に明確ではありません。例:
_<p1> <div/> </p1 <p2/>
_
Divの親の次はp2です。これは:
_ //div[@id='container'][1]/parent::*/following-sibling::*
_
以下
_ //div[@id='container'][1]/../following-sibling::*
_
最初の1つのエクステントのみを検索する場合は、「述語」を含む式(たとえば、最初の1つは_[1]
_-または最初の3つは[position() < 4]
)
最初のdivの最初の子を探している場合:
_//div[@id='container'][1]/*[1]
_
Idを持つdivが1つしかない場合、最初の子を探します。
_ //div[@id='container']/*[1]
_
等々。
XPathは次のようになります。
id(= /// =)equaltocontainerを持つすべてのdiv要素を取得する。
最初のものなどを取得するには、2つのオプションがあります。
それを.findElement()
に変えます-これはとにかく最初のものを返すだけです。
または
XPathでこれを明示的に行うには、次のようにします。
(//div[@id='container'])[1]
最初のもの、2番目のものなど:
(//div[@id='container'])[2]
次に、XPathにはlastと呼ばれる特別なインデクサーがあり、これにより(予想通り)last要素が見つかります。
(//div[@id='container'])[last()]
XPathインデクサーは、ではなく1から始まることは、ほとんどのプログラミング言語の場合と同様です。
親の「ノード」の取得に関しては、parentを使用できます。
//div[@id='container']/parent::*
divの直接の親を取得します。
次に、さらに進んで、first*div*のIDがcontainer、そして私はhis親が欲しい:
(//div[@id='container'])[1]/parent::*
お役に立てば幸いです。
の代わりに
css=#container
使用する
css=div.container:nth-of-type(1),css=div.container:nth-of-type(2)