【问题标题】:Selenium Streams - NoSuchElementException硒流 - NoSuchElementException
【发布时间】:2021-04-20 05:58:52
【问题描述】:

有人可以帮我解决这个代码吗?使用流时出现 NoSuchElement 异常。 foreach() 替代(已评论)工作正常。我想知道如果用流实现它为什么会抛出异常。以下是供您参考的代码:

public class Test {
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver", "E:\\Sajidh\\WebDriver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
WebElement product = driver.findElements(By.cssSelector("div.product")).stream().filter(p->p.findElement(By.cssSelector("h4.product-name")).getText().contains("Potato")).collect(Collectors.toList()).get(0);
// WebElement product = null;
// for(WebElement p : driver.findElements(By.cssSelector("div.product")))
// {
// if(p.findElement(By.cssSelector("h4.product-name")).getText().contains("Potato"))
// {
// product = p;
// break;
// }
// }
System.out.println(product.findElement(By.cssSelector("h4.product-name")).getText());
System.out.println(product.findElement(By.cssSelector("input.quantity")).getText());
System.out.println(product.findElements(By.cssSelector("div.product-action button:nth-child(1)")).size());
product.findElement(By.cssSelector("div.product-action button:nth-child(1)")).click();
}
}

【问题讨论】:

    标签: selenium selenium-webdriver java-stream webdriverwait nosuchelementexception


    【解决方案1】:

    要打印所有元素的textContent,您需要为visibilityOfAllElementsLocatedBy() 诱导WebDriverWait,您可以使用Java8 stream()map(),您可以使用其中任何一个以下Locator Strategies

    • cssSelector:

      import java.util.stream.Collectors;
      
      import org.openqa.selenium.By;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.chrome.ChromeDriver;
      import org.openqa.selenium.chrome.ChromeOptions;
      import org.openqa.selenium.support.ui.ExpectedConditions;
      import org.openqa.selenium.support.ui.WebDriverWait;
      
      System.setProperty("webdriver.chrome.driver", "C:\\WebDrivers\\chromedriver.exe");
      ChromeOptions options = new ChromeOptions();
      options.addArguments("--start-maximized");
      WebDriver driver = new ChromeDriver(options);
      driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.product h4.product-name"))).stream().map(element->element.getText()).collect(Collectors.toList()));
      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='product']//h4[@class='product-name']"))).stream().map(element->element.getText()).collect(Collectors.toList()));
      driver.quit();
      
    • 控制台输出:

      [Brocolli - 1 Kg, Cauliflower - 1 Kg, Cucumber - 1 Kg, Beetroot - 1 Kg, Carrot - 1 Kg, Tomato - 1 Kg, Beans - 1 Kg, Brinjal - 1 Kg, Capsicum, Mushroom - 1 Kg, Potato - 1 Kg, Pumpkin - 1 Kg, Corn - 1 Kg, Onion - 1 Kg, Apple - 1 Kg, Banana - 1 Kg, Grapes - 1 Kg, Mango - 1 Kg, Musk Melon - 1 Kg, Orange - 1 Kg, Pears - 1 Kg, Pomegranate - 1 Kg, Raspberry - 1/4 Kg, Strawberry - 1/4 Kg, Water Melon - 1 Kg, Almonds - 1/4 Kg, Pista - 1/4 Kg, Nuts Mixture - 1 Kg, Cashews - 1 Kg, Walnuts - 1/4 Kg]
      
    • xpath:

      import java.util.stream.Collectors;
      
      import org.openqa.selenium.By;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.chrome.ChromeDriver;
      import org.openqa.selenium.chrome.ChromeOptions;
      import org.openqa.selenium.support.ui.ExpectedConditions;
      import org.openqa.selenium.support.ui.WebDriverWait;
      
      System.setProperty("webdriver.chrome.driver", "C:\\WebDrivers\\chromedriver.exe");
      ChromeOptions options = new ChromeOptions();
      options.addArguments("--start-maximized");
      WebDriver driver = new ChromeDriver(options);
      driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.product h4.product-name"))).stream().map(element->element.getText()).collect(Collectors.toList()));
      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='product']//h4[@class='product-name']"))).stream().map(element->element.getText()).collect(Collectors.toList()));
      driver.quit();
      
    • 控制台输出:

      [Brocolli - 1 Kg, Cauliflower - 1 Kg, Cucumber - 1 Kg, Beetroot - 1 Kg, Carrot - 1 Kg, Tomato - 1 Kg, Beans - 1 Kg, Brinjal - 1 Kg, Capsicum, Mushroom - 1 Kg, Potato - 1 Kg, Pumpkin - 1 Kg, Corn - 1 Kg, Onion - 1 Kg, Apple - 1 Kg, Banana - 1 Kg, Grapes - 1 Kg, Mango - 1 Kg, Musk Melon - 1 Kg, Orange - 1 Kg, Pears - 1 Kg, Pomegranate - 1 Kg, Raspberry - 1/4 Kg, Strawberry - 1/4 Kg, Water Melon - 1 Kg, Almonds - 1/4 Kg, Pista - 1/4 Kg, Nuts Mixture - 1 Kg, Cashews - 1 Kg, Walnuts - 1/4 Kg]
      

    【讨论】:

    • 您好 Debanjan,感谢您的帮助。印刷对我来说工作正常。我对第 5 行的流语句有疑问。它返回 NoSuchElementException。你知道为什么会这样吗?
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2015-11-06
    • 2015-01-09
    • 1970-01-01
    • 2020-12-07
    • 2021-10-21
    • 2021-11-23
    • 2014-05-03
    相关资源
    最近更新 更多