简体   繁体   中英

Getting WebElement while using another WebElement

I'm trying to get elements inside another extracted element using selenium. But I'm getting unexpected results. For example the code below returns the same "data-time" and the tweet time in the loop. Notice how the "data-item-id" is different but the "data-time" is the same. I'm trying to get the "data-time" related to the element in the loop. Any idea what my mistake is?

    driver.get("https://twitter.com/CNN");

    List<WebElement> tweets = driver.findElements(By.xpath("//li[contains(@class, 'js-stream-item')]"));

    for (int i = 0; i < tweets.size(); i++) {
        System.out.println(tweets.get(i).getAttribute("data-item-id"));
        WebElement tweetTime = tweets.get(i).findElement(By.xpath("//div[1]/div[2]/div[1]/small/a/span"));
        System.out.println(tweetTime.getAttribute("data-time"));
        System.out.println(tweetTime.getText());
        System.out.println("-----------------------------------");
    }

Output

964597320301121536
1518812897
Feb 16
-----------------------------------
966636880702840834
1518812897
Feb 16
-----------------------------------
966638057217757184
1518812897
Feb 16
-----------------------------------
966636332721360896
1518812897
Feb 16
-----------------------------------
966633486797942784
1518812897
Feb 16
-----------------------------------
966630573740523520
1518812897
Feb 16
-----------------------------------
966627896474460160
1518812897
Feb 16
-----------------------------------
966624849732034560
1518812897
Feb 16
-----------------------------------
966622030526402561
1518812897
Feb 16
-----------------------------------
966611062052343808
1518812897
Feb 16
-----------------------------------
966605886792830976
1518812897
Feb 16
-----------------------------------
966604093719482373
1518812897
Feb 16
-----------------------------------
966602318522265600
1518812897
Feb 16
-----------------------------------
966600547364233216
1518812897
Feb 16
-----------------------------------
966598713903865857
1518812897
Feb 16
-----------------------------------
966594943216242688
1518812897
Feb 16
-----------------------------------
966591153700245505
1518812897
Feb 16
-----------------------------------
966587390805577730
1518812897
Feb 16
-----------------------------------
966587263147741185
1518812897
Feb 16
-----------------------------------
966585227618541568
1518812897
Feb 16
-----------------------------------
966583600673099777
1518812897
Feb 16
-----------------------------------

This is common issue: to find element inside each tweets.get(i) you should specify dot which stands for current node (context) in the beginning of XPath:

".//div[1]/div[2]/div[1]/small/a/span"  # first node found inside current tweet

instead of

"//div[1]/div[2]/div[1]/small/a/span"  # first node found in DOM

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM