硒Java中是否存在检查字段

时间:2019-03-27 07:38:04

标签: selenium selenium-webdriver automated-tests browser-automation

我需要查找是否显示一个元素。如何在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'

3 个答案:

答案 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毫秒之内找到它