0

これは私のコードがどのように見えるかです

    public void someTest() {
      String x = "/html/body/div/div["
      String y = "]/a"
         for (int i = 1; i < 5; i++){
            String links = x + i + y;
            driver.findElement(By.xpath(links)).click(); // This will iteratively go to the next link and click on it
         }
    }

ただし、私が達成しようとしているのは、リンクをクリックすると、子孫リンクを探してそれらもクリックする必要があるということです。それで、それを行う方法はありますか?次のようなことを試してみると、うまくいきますか?

    driver.findElement(By.xpath(links/descendant::a).click(); 
4

4 に答える 4

1

これは脆弱なコーディング方法であり、ループを通過するときに xpath を変更します。代わりに、findElements メソッドを使用して、返される要素を次のようにループすることをお勧めします。

public void someTest() {
 xpath xpath_findlinks = "/html/body/div/div/a";
 xpath relative_xpath = "./..//a";
 for (WebElement eachlink : driver.findElements(By.xpath(xpath_findlinks))) {
  eachlink.click();
  for (WebElement descendantlink : eachlink.FindElements(By.xpath(relative_xpath))) {
   descendantlink.click();
  }
 }
}

決定的な違いに注意してください。初めて呼び出すfindElementsのはdriverであるため、html全体を調べています。しかし、2 回目は、特定の要素(現在のリンク)のメソッドとして呼び出されるため、そのリンクに関連する要素を見つけるために使用できます。たとえば、子孫を見つけることができます。

この構造を使用することをお勧めします。ただし、全体的な html を知らなければ、使用する相対 xpath を知ることは困難です。私が提供したものは、相対 xpath がどのように見えるかの例にすぎません./

于 2013-08-06T16:15:00.660 に答える
0

これを試して

  String x = "/html/body/div/div[";
  String y = "]//a"; // notice the double "//"

XPathの//は、 type のすべての子孫を照合する必要がありaます。

于 2013-07-17T20:15:45.783 に答える