如何使用Selenium和Java通过CSS选择器打印由板球手以记分牌格式的webelements计分的跑分

问题描述 投票:1回答:2

我只想使用CSS选择器打印在硒板球比赛中所有击球手打分的成绩。所有行都具有相同的类名,并且运行在第三行中,因此我仅使用CSS选择器选择了第三行,但无法打印运行。这是我的代码:

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

public class tableGrid_Practice {

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "G:\\AutomationPractice\\src\\drivers\\chromedriver.exe");
        WebDriver driver= new ChromeDriver();
        driver.get("http://www.cricbuzz.com/live-cricket-scorecard/18970/pak-vs-sl-2nd-t20i-pakistan-v-sri-lanka-in-uae-2017");
        Thread.sleep(5000);
        WebElement table=driver.findElement(By.cssSelector("div[class='cb-col cb-col-100 cb-ltst-wgt-hdr']"));

        int count=table.findElements(By.cssSelector("div[classname='cb-col cb-col-100 cb-scrd-itms'] div:nth-child(3)")).size();
        System.out.println(count);
        for(int i=0;i<count;i++)
        {
            //table.findElements(By.cssSelector("div[classname='cb-col cb-col-100 cb-scrd-itms'] div:nth-child(3)")).get(i);
            System.out.println(table.findElements(By.cssSelector("div[classname='cb-col cb-col-100 cb-scrd-itms'] div:nth-child(3)")).get(i));

        }
    }
}
java selenium selenium-webdriver css-selectors
2个回答
1
投票

要打印由所有击球手打分的打印成绩在网站https://www.cricbuzz.com/live-cricket-scorecard/18970/pak-vs-sl-2nd-t20i-pakistan-v-sri-lanka-in-uae-2017的第一局中,您需要为WebDriverWait引入visibilityOfAllElementsLocatedBy(),并且可以使用以下基于Locator Strategy

  • 代码块:

    driver.get("https://www.cricbuzz.com/live-cricket-scorecard/18970/pak-vs-sl-2nd-t20i-pakistan-v-sri-lanka-in-uae-2017");
    List<WebElement> runs = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.ng-scope#innings_1>div div div.text-bold:nth-child(3)")));
      for(WebElement run:runs) { System.out.println(run.getText()); }
    driver.quit();
    
  • 控制台输出:

    R
    51
    19
    32
    1
    3
    1
    6
    0
    1
    2
    4
    

替代使用Java 8 stream()

作为替代,您可以如下使用Java8 stream()stream()

  • 代码块:

    map()
  • 控制台输出:

    map()

参考

您可以在以下位置找到相关的讨论:

  • driver.get("https://www.cricbuzz.com/live-cricket-scorecard/18970/pak-vs-sl-2nd-t20i-pakistan-v-sri-lanka-in-uae-2017"); System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.ng-scope#innings_1>div div div.text-bold:nth-child(3)"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList()));

0
投票

在上面的代码段中,您实际上是在打印WebElement。 [R, 51, 19, 32, 1, 3, 1, 6, 0, 1, 2, 4] 方法返回List,并且此列表上的get方法将返回第i个webelement。为了打印运行,您必须根据页面的HTML结构在webelement上使用getText()或getAttribute(“ attribute_name”)。您可以这样修改代码:

How to extract the dynamic values of the id attributes of the table elements using Selenium and Java

请相应地修改脚本,您将可以打印运行。

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.