Handling Dynamic Web Tables Using Selenium by using XPATH
In below example we have consider Application Under Test from url as- https://www.redmine.org/issues .
Where this url/application contains issues reported by users etc.. All the reported issues are in
tabular format. In below example we have used xpath with multiple condition in a single xpath.
Also we have passed java variable as a argument to xpath at runtime.
Here, we have to pass issueId and status as a argument below code will check issueId and respective
status code is matched or not with table data if not it will click on next page and searched
the given condition with table data it will search until it will find at least one of the record.
Once the record found then execution will stop.
Screenshot of the Page:
Java Code:
package seleniumCode;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class WebTable
{
public static void main(String[] args)
{
WebDriver driver = null;
List<WebElement> listWebElement = null;
boolean flag = false;
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.redmine.org/issues");
String issueId = "28232";
String status = "New";
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
do
{
listWebElement = driver.findElements(By.xpath("//table[@class='list issues']
//tr//a[text()='"+issueId+"']//ancestor::td//following-sibling::
td[text()='"+status+"']//preceding-sibling::td/input"));
for (WebElement element : listWebElement)
{
System.out.println(element.getAttribute("value"));
element.click();
flag = true;
break;
}
if(flag==true)
break;
if(flag == false || listWebElement.size()==0)
{
//Page Down
Actions ac = new Actions(driver);
ac.moveToElement(driver.findElement(By.cssSelector("a.atom"))).build().perform();
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
driver.findElements(By.cssSelector("a.next")).get(0).click();
}
}while(driver.findElements(By.cssSelector("a.next")).size()>0 || flag==false);
}
}
See Also:
No comments:
Post a Comment