java - 为什么我在 Selenium 中的同一个 WebElement 上得到不同的结果?

标签 java selenium selenium-webdriver xpath css-selectors

从链接 ( https://www.cricbuzz.com/live-cricket-scorecard/22773/nz-vs-ind-1st-t20i-india-tour-of-new-zealand-2020 ) 我想打印印度局的数据。当我在 WebElement(行)上使用 XPath 和 cssSelector 时,为什么会得到不同的结果?

使用 XPath 作为选择器的代码:


package basic;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Assignment8 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        //div[@id='innings_2']/div[@class='cb-col cb-col-100 cb-ltst-wgt-hdr']
        System.setProperty("webdriver.chrome.driver","C:\\Users\\AW5044309\\Desktop\\Selenium\\chromedriver.exe");
        WebDriver driver= new ChromeDriver();

        driver.get("https://www.cricbuzz.com/live-cricket-scorecard/22773/nz-vs-ind-1st-t20i-india-tour-of-new-zealand-2020");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        WebElement table = driver.findElement(By.xpath("//div[@id='innings_2']/div[@class='cb-col cb-col-100 cb-ltst-wgt-hdr']"));

         List<WebElement> rows = table.findElements(By.xpath("//div[@class='cb-col cb-col-100 cb-scrd-itms']"));

    for(WebElement a: rows) {
        System.out.println(a.getText());
    }

    }

}

输出:

Guptill c Rohit b Shivam Dube30 19 4 1 157.89
Munro c Chahal b SN Thaku 59 42 6 2 140.48
Williamson (c) c Kohli b Chahal 51 26 4 4 196.15
de Grandhomme c Shivam Dube b Ravindra Jadeja 0 2 0 0 0.00
Ross Taylor
not out
54
27
3
3
200.00
Seifert (wk)
c Shreyas Iyer b Bumrah
1
2
0
0
50.00
Santner
not out
2
2
0
0
100.00
Extras
6
 (b 0, lb 1, w 5, nb 0, p 0)
Total
203
 (5 wkts, 20 Ov)
Did not Bat
Tickner, Southee, Ish Sodhi, Bennett
Rohit Sharma
c Ross Taylor b Santner
7
6
0
1
116.67
Lokesh Rahul (wk)
c Southee b Ish Sodhi
56
27
4
3
207.41
Virat Kohli (c)
c Guptill b Tickner
45
32
3
1
140.62
Shreyas Iyer
not out
58
29
5
3
200.00
Shivam Dube
c Southee b Ish Sodhi
13
9
1
1
144.44
Manish Pandey
not out
14
12
0
1
116.67
Extras
11
 (b 0, lb 0, w 10, nb 1, p 0)
Total
204
 (4 wkts, 19 Ov)
Did not Bat
Ravindra Jadeja, Shardul Thakur, Mohammed Shami, Yuzvendra Chahal, Jasprit Bumrah

使用 cssSelector 的代码:

package basic;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Assignment8 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        //div[@id='innings_2']/div[@class='cb-col cb-col-100 cb-ltst-wgt-hdr']
        System.setProperty("webdriver.chrome.driver","C:\\Users\\AW5044309\\Desktop\\Selenium\\chromedriver.exe");
        WebDriver driver= new ChromeDriver();

        driver.get("https://www.cricbuzz.com/live-cricket-scorecard/22773/nz-vs-ind-1st-t20i-india-tour-of-new-zealand-2020");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        WebElement table = driver.findElement(By.xpath("//div[@id='innings_2']/div[@class='cb-col cb-col-100 cb-ltst-wgt-hdr']"));

         List<WebElement> rows = table.findElements(By.cssSelector("div[class='cb-col cb-col-100 cb-scrd-itms']"));

    for(WebElement a: rows) {
        System.out.println(a.getText());
    }

    }
}

输出:

Rohit Sharma
c Ross Taylor b Santner
7
6
0
1
116.67
Lokesh Rahul (wk)
c Southee b Ish Sodhi
56
27
4
3
207.41
Virat Kohli (c)
c Guptill b Tickner
45
32
3
1
140.62
Shreyas Iyer
not out
58
29
5
3
200.00
Shivam Dube
c Southee b Ish Sodhi
13
9
1
1
144.44
Manish Pandey
not out
14
12
0
1
116.67
Extras
11
 (b 0, lb 0, w 10, nb 1, p 0)
Total
204
 (4 wkts, 19 Ov)
Did not Bat
Ravindra Jadeja, Shardul Thakur, Mohammed Shami, Yuzvendra Chahal, Jasprit Bumrah

最佳答案

使用 xpath 在另一个元素中搜索元素时,在 xpath 的开头添加 . 非常重要。使用下面的代码

List<WebElement> rows = table.findElements(By.xpath(".//div[@class='cb-col cb-col-100 cb-scrd-itms']"));

开头的.表示当前处理从当前节点开始。

What if we don't use dot at the start what it signifies?

然后,您将在整个文档中选择具有匹配 xpath //div[@class='cb-col cb-col-100 cb-scrd-itms'] 的所有元素节点。 (当前场景中正在发生)

查看一些信息 herehere

关于java - 为什么我在 Selenium 中的同一个 WebElement 上得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249326/

相关文章:

python-3.x - 如何从xpath提取元素标签中不存在的字段?

java - 理解Java中HashMap的逻辑

JPanel 之上的 Java JPanel(绘图之上绘图)

Python 3 + Selenium : Clicked the element but nothing happen

python - 选择元素不从 .first_selected_option() 方法返回 webelement

selenium - 如何在 Selenium 中找到具有多个类的元素

java jsp网页缓存POST请求

java - Xerces-for-Android 使用 Jar 而不是源代码时出现 NoClassDefFoundError

java - DOM 中不再存在移动元素 - selenium

java - Selenium 。 Selenium 化物。由于某种原因找不到 org.openqa.selenium.WrapsDriver 的类文件