0

I have 3 options in a home page with the same class name and different values see code bellow:

First Option menu

 <select class="form-control mandatory" tabindex="4" required="" autocomplete="off" name="SearchHome.documentType">
    <option value=""></option>
    <option value="VISA">Visa</option>
    <option value="EDF">EDF</option>
    </select>

Second Option menu

<select class="form-control mandatory" tabindex="5" required="" autocomplete="off" name="SearchHome.documentSubType">
<option value=""></option>
<option value="BusinessVisa">Business Visa</option>
<option value="VisitantVisa">Visitant Visa</option>
<option value="WorkingVisa">Working Visa</option>
<option value="ResidenceVisa">Residence Visa</option>
<option value="StudentVisa">Student Visa</option>
<option value="TouristVisa">Tourist Visa</option>
<option value="VisaForTemporaryResidence">Visa for Temporary Residence</option>
<option value="VisaSportsCulture">Visa Sports + Culture</option>
<option value="VisaForInvestmentActivity">Visa For Investment Activity</option>
</select>

Third Option menu

<select class="form-control mandatory" tabindex="6" required="" autocomplete="off" name="SearchHome.useCaseName">
<option value=""></option><option value="EXTENSION">EXTENSION</option>
</select>

The values from the second and third option menu are dynamic. i.e. depending on what I choose in the first option menu the value in the second option menu will be different. And also depending on value I choose in the second option menu the value will be different on the third option menu.

I'm trying to automatically select the first option values (already did it), however when I try to select the second option values is always getting the first option values. :(

I tried to switch tab but this is not helping.

package co.edureka.selenium.inCountry;


import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.chrome.ChromeDriver;

public class BusinessVisaHappyPath {

static WebDriver driver;

public static void main(String[] args) {
        basicSettings();
        loginTestCase("getidadmin@boca01", "12345");
        selectVisaDocumentHomePage();       
        //CloseAndQuitWebDriver();
}


// this is working
private static void selectVisaDocumentHomePage() {
    // Wait until ExpectedConditions is Fulfilled
    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy((By.xpath("//*[@class=\"form-control mandatory\"]"))));
    
    /*
     * Select dropDown = new
     * Select(driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"))
     * ); dropDown.selectByValue("VISA"); WebElement element =
     * driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"));
     * element.sendKeys(Keys.TAB);
     */
    
    
    WebElement mySelectElm = driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]")); 
    Select mySelect= new Select(mySelectElm);
    List<WebElement> options = mySelect.getOptions();
    for (WebElement option : options) {
        if (option.getText().equalsIgnoreCase("VISA")) {
            option.click();
        }
    }
    mySelectElm.sendKeys(Keys.TAB);
    
    String at = driver.getTitle();
    String et = "GetID Webg";
    
    
    if (at.equalsIgnoreCase(et))
    {
    
        System.out.println("Select Document Test, passed");
        selectVisaDocumentTypeHomePage();
        
    } else {
        System.out.println("Select Document Test, not passed");
    }
}

// second option is not working :(
private static void selectVisaDocumentTypeHomePage() { 
    // Wait until ExpectedConditions is Fulfilled
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
    WebElement element =  driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"));
    element.sendKeys(Keys.ENTER);
    
    /*
     * Select dropDown = new Select(driver.findElement(By.
     * xpath("//*[(@class=\"form-control mandatory\") and (@name=\"SearchHome.documentType\")]"
     * ))); dropDown.selectByValue("BusinessVisa");
     */
    WebElement mySelectElm = driver.findElement(By.xpath("//*[(@class=\"form-control mandatory\") and (@name=\"SearchHome.documentType\")]")); 
    Select mySelect= new Select(mySelectElm);
    
    System.out.println(mySelect.getOptions().get(1).getText());
    List<WebElement> options = mySelect.getOptions();
    for (WebElement option : options) {
        if (option.getText().equalsIgnoreCase("BusinessVisa")) {
            option.click();
            System.out.println("Select Document Type Test, passed");
        }
    }
    System.out.println("Select Document Type Test, not passed");
    
}

private static void loginTestCase(String login, String password){
    driver.findElement(By.xpath("//input[contains(@class, 'form-control margin-from-bottom')]")).sendKeys(login);
    driver.findElement(By.xpath("//input[contains(@class, 'inputMask text-center-sm form-control margin-from-bottom')]")).sendKeys(password);
    driver.findElement(By.xpath("//button[contains(@class, 'btn btn-default btn-block')]")).click();
    
    String at = driver.getTitle();
    String et = "GetID Webg";
    
    if (at.equalsIgnoreCase(et))
    {
        System.out.println("Login Test, passed");
        
    } else {
        System.out.println("Login Test, not passed");
    }
}

private static void basicSettings() {
      System.setProperty("webdriver.chrome.driver", "C:\\Users\\admin\\eclipse-workspace\\SeleniumProject\\chromedriver_win32\\chromedriver.exe");
      driver = new ChromeDriver();
      
      driver.get("http://10.35.1.4:10720/login/");
      
      //driver.manage().window().maximize();
}

// not using this method for now
private static void CloseAndQuitWebDriver() {
     driver.close();
     driver.quit();
    
}

How can I select the second and third dropdown tab with correct values ?

2 Answers 2

1

Use name attribute in xpath which will uniquely identify the dropdown element.

Dropdown 1:

 //select[@name='SearchHome.documentType']

Dropdown 2:

//select[@name='SearchHome.documentSubType']

Dropdown 3:

//select[@name='SearchHome.useCaseName']

Effectively your code will be

WebElement mySelectElm1 = driver.findElement(By.xpath("//select[@name='SearchHome.documentType']")); 

WebElement mySelectElm2 = driver.findElement(By.xpath("//select[@name='SearchHome.documentSubType']")); 

WebElement mySelectElm3 = driver.findElement(By.xpath("//select[@name='SearchHome.useCaseName']")); 
Sign up to request clarification or add additional context in comments.

Comments

0

To select

  • VISA as the <option> from the first dropdown,
  • BusinessVisa as the <option> from the second dropdown,
  • EXTENSION as the <option> from the third dropdown,

You need to induce WebDriverWait for the elementToBeClickable() and you can use either of the following Locator Strategies:

  • Using cssSelector and selectByVisibleText():

    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select.form-control.mandatory[name='SearchHome.documentType']")))).selectByVisibleText("Visa");
    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select.form-control.mandatory[name='SearchHome.documentSubType']")))).selectByVisibleText("Business Visa");
    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select.form-control.mandatory[name='SearchHome.useCaseName']")))).selectByVisibleText("EXTENSION");
    
  • Using xpath and selectByValue():

    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@class='form-control mandatory' and @name='SearchHome.documentType']")))).selectByValue("VISA");
    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@class='form-control mandatory' and @name='SearchHome.documentSubType']")))).selectByValue("BusinessVisa");
    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@class='form-control mandatory' and @name='SearchHome.useCaseName']")))).selectByValue("EXTENSION");
    

1 Comment

Thank You, this solution also works thank you

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.