代码之家  ›  专栏  ›  技术社区  ›  imbasheep

使用css选择器获取表中包含多个元素的元素

  •  0
  • imbasheep  · 技术社区  · 8 年前

    Html示例代码:

    <tr ng-repeat="testing" class="ng-scope" style="">
        <td class="ng-binding">Style</td>
        <td ng-if="testing2" class="ng-binding ng-scope">1</td>
        <td class="ng-binding">5%</td>
    </tr>
    <tr ng-repeat="testing" class="ng-scope" style="">
        <td class="ng-binding">Mask</td>
        <td ng-if="testing2" class="ng-binding ng-scope">2</td>
        <td class="ng-binding">8%</td>
    </tr>
    ...
    

    让我们想象一下,还会有更多这样的人。最重要的一点是,这些可以随机化。每一次。它们取决于最后一页我选择了什么以及如何选择。

    所以基本上我想搜索测试,它有8%。

    我尝试了什么,但我不知道该怎么办。它将所有元素存储在列表中。但是我得到了css选择器与铬驱动程序信息之前。我可以脱下来,但我认为有更好的解决方案:

    List<WebElement> list = getWebDriver().findElements(By.cssSelector("[ng-
    repeat='hyvitisLiik in vm.taotluseHyvitised'] > [class='ng-binding']"));
    for(int i = 0; i < list.size(); i++){
      logger.info(list.get(1));
    }
    

    我还尝试使用以下代码获取元素:

    int counter = $$(By.cssSelector("tr > [class='ng-binding']")).size();
    for (int i = 0; i < counter; i++) {
    SelenideElement word= $$(By.cssSelector(lokaator)).get(counter);
    word.getText();
    }
    

    例如:在web中搜索单词“Mask”,取百分比值(在这种情况下是8%),并用assert验证它正好是8%。

    tr[1] > [class='ng-binding']
    

    编辑: 是否可以使用css选择器仅使用一行来获取元素,如xpath选项所示,以回答@Guy所写的问题:

    WebElementelement=getWebDriver().findElement(By.xpath("//td[text()='Mask']/followingsibling::td[2]"));
    element.getText(); // 8%
    
    5 回复  |  直到 8 年前
        1
  •  1
  •   Guy    8 年前

    您可以使用 xpath 使用 Mask

    WebElement element = getWebDriver().findElement(By.xpath("//td[text()='Mask']/following-sibling::td[2]"));
    element.getText(); // 8%
    
        2
  •  1
  •   Murthi    8 年前

    您可以尝试使用以下css选择器,它可能会对您有所帮助。

    table>tr:nth-child(2)>td ---- To get the first td element of second row
    
    table>tr:nth-child(2)>td:nth-child(3) --- To get last td element of second row
    

    在Java中,

    List<WebElemet> lstRows=getWebDriver().findElements(By.cssSelector("table>tr[ng-repeat='testing']");
    
    for(WebElement row:lstRows){
       if(row.findElement(By.cssSelector("td")).getText().equals("Mask")){
      {
      String percentage= row.findElement(By.cssSelector("td:last-child")).getText();
       if(percentage.equals("8%")
         System.out.println("pass");
       else
         System.out.println("fail");
      break;
      }
    }
    
        3
  •  1
  •   Pankaj Sharma    8 年前

    使用CSS和Java,我们可以执行以下操作:

    List<WebElement> elements = getWebDriver().findElements(By.cssSelector("tr[ng-repeat='testing']"));
        for(int i = 0; i < elements.size(); i++) {
            if(elements.get(i).findElement(By.cssSelector("td")).getText().contains("Mask")) {
                //assert elements.get(i).findElements(By.cssSelector("td")).get(2).getText() equals 8%
        }
    }
    

    或者,如果使用xpath,可以通过比较 “//tr[@ng repeat='testing']/td[contains(text(),'Mask')]]//td[3]'

        4
  •  0
  •   undetected Selenium    8 年前

    search in web for the word "Mask", take the percent value (in that case it is 8%) and validate with assert that it is exactly 8% Mask 和文本 8% . 从 main() test() 类调用提供参数的函数。在被调用的函数中,我们可以轻松检索文本并断言百分比。您的代码如下所示:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Assert;
    
    public class Q46088968_validate_score 
    {
        static WebDriver driver;
        public static void main(String[] args) 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.get("https://www.gmail.com");
            //other actions
            validate_score("Mask", "8%");
            driver.quit();
        }
    
        public static void validate_score(String my_text, String expected_percentage)
        {
            String actual_percentage = driver.findElement(By.xpath("//td[.='" + my_text + "']//following::td[2]")).getText();
            Assert.assertEquals(actual_percentage, expected_percentage);
        }
    }
    
        5
  •  0
  •   Abhisek Mishra    8 年前

    试试这个

    List<WebElement> elements = getWebDriver().findElements(By.xpath("//td[text()='Mask']/../td[3]"));
    
        int pass = 0;
        for(WebElement e | elements) {
           if(!(e.getText().equals("8%"))) {
              pass = 1
           }
        }
    
        if(pass == 0) {
    System.out.println("Pass");
    } 
    else {
    System.out.println("Fail");
    }