我需要查找是否显示一个元素。如何在Selenium Web驱动程序中检查?
if(driver.findElement(By.id("p_first_name")).isDisplayed())
{
WebElement fname =driver.findElement(By.id("p_first_name"));
fname.sendKeys("pradnya");
WebElement lname = driver.findElement(By.xpath("//*[@id=\"p_last_name\"]"));
lname.sendKeys("Bolli");
WebElement Address1 = driver.findElement(By.xpath("//*[@id=\"address_11\"]"));
Address1.sendKeys("New address1");
WebElement Address2 = driver.findElement(By.xpath("//*[@id=\"address_21\"]"));
Address2.sendKeys("New address2");
WebElement City = driver.findElement(By.xpath("//*[@id=\"city1\"]"));
City.sendKeys("Pune");
WebElement Country = driver.findElement(By.xpath("//*[@id=\"country1\"]"));
Country.sendKeys("India");
WebElement ZipCode = driver.findElement(By.xpath("//*[@id=\"pincode1\"]"));
ZipCode.sendKeys("India");
WebElement State = driver.findElement(By.xpath("//*[@id=\"bds\"]"));
State.sendKeys("Maharashtra");
}
else
{
WebElement address = driver.findElement(By.xpath("//*[@id=\"update_add77\"]"));
address.click();
}
首先在结帐页面上显示地址表格,当用户提交文件时将显示列表。列表显示时地址表未显示。在这种情况下,如何检查是否显示地址表格字段?
我使用上面的代码,但是它给了我异常消息
'Unable to locate element: #p_first_name'
答案 0 :(得分:3)
该元素给出了NoSuchElementException
,因为您试图使用isDisplayed()
方法在其上找到它的UI上不存在该元素。
因此,要解决您的问题,您应该获取元素的列表,然后获取该列表的大小,如果大小大于0,则表示该元素存在于页面上,否则该元素不存在。
您需要在代码中进行以下更改:
if(driver.findElements(By.id("p_first_name")).size()>0){
// Add the if code here
}
else{
// Add the else code here
}
答案 1 :(得分:0)
您可以创建用于这种检查的方法。我们正在使用 NoSuchElementException
来验证元素不存在。
public boolean isElementExist(By locator)
{
try {
driver.findElement(locator);
} catch (NoSuchElementException e) {
return false;
}
return true;
}
或者由于缓慢的加载和超时,我建议使用*WebDriverWait*
答案 2 :(得分:0)
public boolean isElementPresent(By element,int timeOutInSeconds,int pollingEveryInMiliSec) {
try {
WebDriverWait wait = new WebDriverWait(d, timeOutInSeconds);
wait.pollingEvery(pollingEveryInMiliSec, TimeUnit.MILLISECONDS);
wait.ignoring(NoSuchElementException.class);
wait.ignoring(ElementNotVisibleException.class);
wait.ignoring(StaleElementReferenceException.class);
wait.ignoring(NoSuchFrameException.class);
wait.until(ExpectedConditions.visibilityOfElementLocated(element) ));
return true;
}
catch(Exception e) {
return false;
}
}
如果您考虑每5毫秒timeOutInSeconds = 20并且pollingEveryInMiliSec = 5,则此方法将搜索给定元素,直到20毫秒之内找到它