Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Selenium和Java通过CSS选择器以记分板格式webelements打印击球手的得分_Java_Selenium_Selenium Webdriver_Css Selectors - Fatal编程技术网

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

如何使用Selenium和Java通过CSS选择器以记分板格式webelements打印击球手的得分,java,selenium,selenium-webdriver,css-selectors,Java,Selenium,Selenium Webdriver,Css Selectors,我想使用CSS选择器在selenium中打印板球比赛中所有击球手的得分。所有行都有相同的类名,并且运行在第三行,所以我使用CSS选择器仅选择第三行,但我无法打印运行。这是我的密码: package SomeBasicAutomationPractice; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.ope

我想使用CSS选择器在selenium中打印板球比赛中所有击球手的得分。所有行都有相同的类名,并且运行在第三行,所以我使用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));

        }
    }
}
打包一些基本的自动化实践;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.chrome.ChromeDriver;
公共课教学实践{
公共静态void main(字符串[]args)引发InterruptedException{
System.setProperty(“webdriver.chrome.driver”,“G:\\AutomationPractice\\src\\drivers\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://www.cricbuzz.com/live-cricket-scorecard/18970/pak-vs-sl-2nd-t20i-pakistan-v-sri-lanka-in-uae-2017");
睡眠(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();
系统输出打印项次(计数);

对于(int i=0;i在上述代码段中,您实际上是在打印WebElement。
findElements
方法返回列表,此列表上的get方法将返回第i个WebElement。为了打印运行,您必须根据页面的HTML结构在WebElement上使用getText()或getAttribute(“属性名称”)。 您可以这样修改代码:

List<WebElement> list=table.findElements(By.cssSelector("div[classname='cb-col cb-col-100 cb-scrd-itms'] div:nth-child(3)"));
for(int i=0; i<list.size(); i++){
    System.out.println(list.get(i).getText());
}
List List=table.findElements(由.cssSelector(“div[classname='cb-col cb-col-100 cb-scrd itms']div:nth child(3)”);
对于(int i=0;i要打印所有击球手在网站第一局中的得分,您需要为所有击球手的<代码>可见性进行归纳()
,您可以使用以下基于:

  • 代码块:

    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();
    
    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()));
    

使用Java 8
stream()
作为替代方案,您可以使用Java8,如下所示:

  • 代码块:

    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();
    
    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()));
    
  • 控制台输出:

    R
    51
    19
    32
    1
    3
    1
    6
    0
    1
    2
    4
    
    [R, 51, 19, 32, 1, 3, 1, 6, 0, 1, 2, 4]
    

参考文献 您可以在以下内容中找到相关讨论:


我仍然无法获取元素!只是为了确认我编写的CSS选择器路径不正确?@RohnKerry我不会说CSS选择器路径不正确,而是希望避免使用
classname
值,如
cb-col
cb-col-100
,因为我不明白它们对HTML的影响。我可以肯定的是在哪里关于
classname
value
text bold
使文本更粗体。因此我更喜欢它们。好的,谢谢确认,您的代码运行良好。谢谢,