//This my testng class**
public class EcommerceTest
{
public static WebDriver driver;
@Test
public void addtoCartTest() throws InterruptedException
{
driver.get("https://rahulshettyacademy.com/seleniumPractise/");
driver.manage().window().maximize();
EkartPage1 oekart = new EkartPage1(driver);
oekart.AddtoCart();
}
@BeforeTest
public void beforeTest() {
System.setProperty("webdriver.chrome.driver", "E:\\selenium\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@AfterTest
public void afterTest() {
//driver.close();
}
}
/**/This my page object class**
public class EkartPage1
{
WebDriver driver;
WebDriverWait wait;
@FindBy(xpath = "//button[contains(text(),'ADDED')]")
WebElement addedBtn;
public EkartPage1(WebDriver driver)
{
wait = new WebDriverWait(driver, 30);
PageFactory.initElements(driver, this);
this.driver = driver;
}
**//This is my method to click Add to cart button**
public void AddtoCart() throws InterruptedException /
{
String[] additems = {"Cucumber","Beans"};
List<WebElement> list = driver.findElements(By.cssSelector("h4.product-name"));
for(int i=0;i<list.size();i++)
{
String[] productname = list.get(i).getText().split("-");
String frmtdname = productname[0].trim();
List itemsneeded = Arrays.asList(additems);
if(itemsneeded.contains(frmtdname))
{
List<WebElement> list2 =driver.findElements(By.xpath("//button[text() ='ADD TO CART']"));
list2.get(i).click();
System.out.println("One product added");
}
}
}
我正在尝试为产品'Beans **单击'添加到购物车'。但是硒网络驱动程序单击与下一个直接产品'Brinjal'相对应的'添加到购物车'按钮。请帮助我解决这个问题。
要在Beans上单击添加到存储卡,您需要将WebDriverWait用作elementToBeClickable()
,并且可以使用以下Locator Strategies之一:
使用xpath:
driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
String item = "Beans";
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//h4[@class='product-name' and starts-with(., '" +item+ "')]//following::div[2]/button[text()='ADD TO CART']"))).click();
浏览器快照: