我的myntra愿望清单有41款产品,其中19款缺货。我试着打印"缺货"产品的名称。
"缺货"元素有一个通用类名,我通过遍历父节点和子节点使用xpath来标识产品名称。
当我在控制台中验证它时,它给出了正确的响应。它显示了19的产品,当我悬停鼠标指针时,它会按预期突出显示缺货的产品。当我调试代码时也能正常工作。
但当我开始运行时,它只打印了7个产品,列表的大小是7。
页面最初显示20顶级产品,然后在向下滚动时显示其余产品。在前20名中,7缺货。这可能是一个原因吗。如果是这种情况,如何处理此滚动事件?
以下是代码片段:
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class stockout {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "path of chromedriver.exe");
WebDriver driver = new ChromeDriver();
WebDriverWait w =new WebDriverWait(driver,30);
driver.get(myntra login page);
//enter phone number driver.findElement(By.xpath(("//div[@class='signInContainer']/div[2]/div/input"))).sendKeys(phone number);
driver.findElement(By.cssSelector("div.submitBottomOption")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//div[@class='bottomeLink']/span")).click();
//enter password
driver.findElement(By.xpath("//input[@type='password']")).sendKeys(password);
driver.findElement(By.cssSelector("button.btn.primary.lg.block.submitButton")).click();
Thread.sleep(4000);
//open wishlist
driver.findElement(By.cssSelector("span.myntraweb-sprite.desktop-iconWishlist.sprites-headerWishlist")).click();
//add out of stock elements to a list
List<WebElement> outofstock = driver.findElements(By.xpath("//img[@class='itemcard-outOfStockItemImage itemcard-itemImage']/parent::picture/parent::a/parent::div/parent::div/div[2]/div/p[1]"));
//explicit wait
w.until(ExpectedConditions.visibilityOfAllElements(outofstock));
System.out.println(outofstock.size());
System.out.println("Items out of stock:");
for (WebElement product: outofstock)
{ System.out.println(product.getText());
}
}
}
在网上找到了解决方案,但想知道是否有更简单的方法可以做到这一点。欢迎提出建议。
我添加了这段向下滚动的代码,它起到了作用:
try {
Object lastHeight = ((JavascriptExecutor) driver).executeScript("return document.body.scrollHeight");
while (true) {
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");
Thread.sleep(2000);
Object newHeight = ((JavascriptExecutor) driver).executeScript("return document.body.scrollHeight");
if (newHeight.equals(lastHeight)) {
break;
}
lastHeight = newHeight;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
如果您希望出现特定数量的元素,则可以使用以下代码。
new WebDriverWait(驱动程序,10(.intill(ExpectedConditions.numberOfElementsToBe(By,19((;