简体   繁体   中英

Selenium Web driver select data from drop down by reading drop down value from excel sheet

I am trying to select drop down value by reading drop down value from excel. I tried following code however, it is not selecting value as per data mentioned in the excel sheet. For me all data are populating correctly in the respective field except Gender drop down.

following are Screen shot of HTML code and UI:

UI图片

Xpath信息

HTML代码

Following are my HTML code:

<td class="codetable last-cell" headers="N224AA-4-2">
<div id="widget___o3id7" class="dijit dijitReset dijitInline dijitLeft codetable dijitTextBox dijitComboBox" lang="en-US" role="listbox" dir="ltr" widgetid="__o3id7" aria-expanded="false">
<div class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" role="presentation" data-dojo-attach-point="_buttonNode, _popupStateNode" popupactive="true">
<input class="dijitReset dijitInputField dijitArrowButtonInner" type="text" role="presentation" readonly="readonly" tabindex="-1" value="▼ ">
</div>
<div class="dijitReset dijitValidationContainer">
<input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" type="text" role="presentation" readonly="readonly" tabindex="-1" value="Χ ">
</div>
<div class="dijitReset dijitInputField dijitInputContainer">
<input id="__o3id7" class="dijitReset dijitInputInner" type="text" aria-haspopup="true" role="textbox" data-dojo-attach-point="textbox,focusNode" autocomplete="off" aria-required="true" tabindex="0" title="Gender Mandatory" size="1" value="Male" aria-owns="__o3id7_popup" aria-activedescendant="__o3id7_popup1">
<input type="hidden" name="__o3id7" value="SX1">
</div>
</div>
</td>

I populated test data in the excel sheet as below where "Female" is drop down value:

UserName password123    100000005   Elena   Sawyerehde  Female

Following are my code:

package com.access;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.annotations.*;
import java.io.FileInputStream;
import jxl.Sheet;
import jxl.Workbook;

public class Registration {

    static WebDriver driver;

      @BeforeMethod
      public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Directory\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();

        Thread.sleep(2000);
      }

      @Test 
      public void TestCase1() throws Exception {
          FileInputStream fi=new FileInputStream("C:\\File\\Book2.xls");
          Workbook w=Workbook.getWorkbook(fi);
          Sheet s=w.getSheet(0);
       driver.get("https://example.com");

        try
        {
        for (int i = 0; i < s.getRows(); i++)
        {
        //Read data from excel sheet
            String s1 = s.getCell(0,i).getContents();
            String s2 = s.getCell(1,i).getContents();
            String s3 = s.getCell(2,i).getContents();
            String s4 = s.getCell(3,i).getContents();
            String s5 = s.getCell(4,i).getContents();
            String s6 = s.getCell(5,i).getContents();

            driver.findElement(By.xpath("html/body/div[2]/form/input[1]")).sendKeys(s1);
            Thread.sleep(2000);
            driver.findElement(By.xpath("html/body/div[2]/form/input[2]")).sendKeys(s2);
            Thread.sleep(2000);
            driver.findElement(By.xpath("html/body/div[2]/a/span/span/span")).click();
            Thread.sleep(2000);
            Assert.assertEquals("Testing Hub", driver.findElement(By.xpath("//*[@id='app-banner']/div[1]/div/h2")).getText());
            Thread.sleep(2000);
            driver.findElement(By.xpath("html/body/div[1]/div[4]/div[1]/div[4]/div/div[2]/div/div/div/span[1]")).click();
            Thread.sleep(2000);         
            driver.findElement(By.xpath("html/body/div[1]/div[4]/div[3]/div[2]/div[3]/div[3]/div[1]/div/div[2]/div/div/div/span/span/span/span[2]")).click();
            Thread.sleep(1000);         
            driver.findElement(By.xpath("html/body/div[4]/table/tbody/tr[2]/td[2]")).click();
            Thread.sleep(2000);     
            driver.switchTo().frame("iframe-curam_ModalDialog_0");
            Thread.sleep(1000);
            driver.findElement(By.xpath("//*[@id='__o3id0']")).sendKeys(s3);
            Thread.sleep(1000);
            driver.findElement(By.xpath("html/body/div[3]/form/div/div[5]/a[1]/span/span/span")).click();
            Thread.sleep(1000);
            Assert.assertEquals("There are no matching items based on the Search Criteria entered.", driver.findElement(By.xpath("html/body/div[3]/div/ul/li/div")).getText());
            Thread.sleep(1000);         
            driver.findElement(By.xpath("html/body/div[4]/div[2]/a/span/span/span")).click();
            Thread.sleep(2000);         
            driver.findElement(By.xpath("html/body/div[3]/form/div/div[2]/div/table/tbody/tr[1]/td[1]/input")).sendKeys(s4);
            Thread.sleep(1000);         
            driver.findElement(By.xpath("html/body/div[3]/form/div/div[2]/div/table/tbody/tr[2]/td[1]/input")).sendKeys(s5);
            Thread.sleep(1000);
            new Select(driver.findElement(By.id("___o3id7"))).selectByValue(s6);
            Thread.sleep(2000);

            }    
            }
            catch(Exception e)
            {
            System.out.println(e);

            }
            }
}

As there is no Select tag in the code you pasted, using select for clicking dropdown won't help.

As per your test script and Html code the id value for the dropdown is different.

//*[@id='widget___o3id7'] - used in the xpath to select dropdown, where in the html code id = "__o3id7" .

Try after changing them

Its better to share your UI to understand the scenario and come to a conclusion


Thanks for sharing the UI and HTML code.

    driver.findElement(By.id("__o3id7")).click();
    Thread.sleep(1500);
    driver.findElement(By.xpath("//*[contains(text(),'Female')]")).click();

Replace your select statement and try this codes. Lets hope this would click 'Female' from your drop down.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM