I'm struggling with the following code using `Selenium 3.141.59` and `Java 11`: @Override public void run() { WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); //WebDriverManager.chromedriver().browserVersion("118.0.5993.118").setup(); //WebDriverManager.chromedriver().browserVersion("114.0.5735.90").setup(); /*options.addArguments("--headless"); options.addArguments("--disable-gpu"); options.addArguments("--disable-extensions");*/ ChromeDriver driver = new ChromeDriver(options); driver.get("..."); List<Article> articleList = new ArrayList<>(); /** * Need to improve it somehow, I need around 300 (as it should work on the website) instead of 140-160 goods */ /*FluentWait<ChromeDriver> fluentWait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(60)) .pollingEvery(Duration.ofMillis(500)) .ignoring(NoSuchElementException.class); List<WebElement> liElements = fluentWait.until(webDriver -> driver.findElements(By.tagName("li")));*/ /*WebDriverWait wait = new WebDriverWait(driver, 60); List<WebElement> liElements = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("li")));*/ /*List<WebElement> liElements = (List<WebElement>) ((JavascriptExecutor) driver) .executeScript("return document.getElementsByTagName('li')");*/ driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); List<WebElement> liElements = driver.findElements(By.tagName("li")); for (WebElement element : liElements) { /** * Need somehow to improve this snippet because of incorrect working of getting price */ WebElement priceElement = element.findElement( By.cssSelector("div.new-arrivals > div.newest-for-you > ul > li")); // Assuming that the 'oriprice' is under a specific class, modify the selector accordingly String price = priceElement.findElement( By.cssSelector("body > div.new-arrivals > div.newest-for-you > ul > li:nth-child(1) > a > div.text > div.price")) .getText(); //String price = element.findElement(By.cssSelector("div.price-box > span.price.notranslate")).getText(); String title = element.findElement(By.cssSelector("p.title")).getText(); String url = element.findElement(By.cssSelector("span.img > a")).getAttribute("href"); String newUrl = url.replace("...", url); ((JavascriptExecutor)driver).executeScript("window.open()"); ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1)); driver.get(newUrl); WebElement img = driver.findElement(By.id("landingImage")); String srcImg = img.getAttribute("src"); articleList.add(new Article(srcImg, url, title, price)); /*((JavascriptExecutor)driver).executeScript("window.close()"); driver.switchTo().window(tabs.get(0));*/ } driver.close(); driver.quit(); articleList.forEach(System.out::println); articleList.forEach(article -> feedAdd(article.getImg(), article.getTitle(), article.getUrl(), article.getPrice())); } And my problem is I could not *extract*/*receive* all loaded elements/goods on the provided [website][1]. **To clarify**: while I'm debugging my own code, I'm getting around `140`-`160` elements, but, in fact, there's `300` elements (`50` rows **x** `6` goods each row): [![enter image description here][2]][2] What I have already tried to use to change my situation: 1. `WebDriverWait` with `ExpectedConditions`: > WebDriverWait wait = new WebDriverWait(driver, 60); > List<WebElement> liElements = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("li"))); 2. `JavaScript` Executor: > List<WebElement> liElements = (List<WebElement>) ((JavascriptExecutor) driver) > .executeScript("return document.getElementsByTagName('li')"); 3. `Implicit Wait`: > driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); > List<WebElement> liElements = driver.findElements(By.tagName("li")); and it still doesn't work for me, I still receive only half of elements, just `160` instead of `300`. I'm looking for any ideas how to avoid it, if I find the way on my own, as always, I'll update my solution, I would really appraciate, if someone help with it if have time. I suppose it could be improved with any `cssSelector`-s or `xpath`. **Important to say**: the only question here is in `DOM`, because there are existing [hidden-li elements][3], for this reason, this forces me use various *delays*, as I provided above. `DOM` looks like: [![enter image description here][4]][4] Thank you in advance for your help. [1]: https://www.banggood.com/new-arrivals.html [2]: https://i.sstatic.net/mQg5D.png [3]: https://sqa.stackexchange.com/q/52229/34920 [4]: https://i.sstatic.net/xq1kp.jpg