2016-07-25 81 views
0

我試圖通過讀取excel中的下拉值來選擇下拉值。然而,我嘗試了下面的代碼,它沒有按照Excel表中提到的數據選擇值。對於我而言,除性別下拉外,其他各個字段中的所有數據都正確填充。Selenium Web驅動程序通過從Excel表中讀取下拉值來從下拉列表中選擇數據

以下是HTML代碼,屏幕截圖和UI:

UI Image

Xpath Information

HTML Code

以下是我的HTML代碼:

<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> 

我populat在Excel工作表如下版的測試數據,其中「女」是下拉值:

UserName password123 100000005 Elena Sawyerehde Female 

以下是我的代碼:

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); 

      } 
      } 
} 
+0

輸入類型是文本。你確定它是一個選擇元素?它也有隻讀屬性爲真,所以不知道你是否可以更新任何東西... – kurakura88

+0

我可以使用發送鍵輸入類型,但我也想通過從Excel表讀取使用下拉值。所以它既有現場能力輸入值也有下拉選擇值。 – Curious

+0

嗨好奇,什麼時候值'女'出現。我猜想點擊下拉菜單後會顯示「女性」的值。我對嗎?? –

回答

0

因爲有你粘貼代碼中沒有選擇標籤,使用點擊下拉菜單的select不會有幫助。

根據您的測試腳本和Html代碼,下拉的id值不同。

//*[@id='widget___o3id7'] - 用於在xpath中選擇下拉列表,其中html代碼爲id = "__o3id7"。改變它們

嘗試其更好地分享您的UI,瞭解情況,並得出一個結論


感謝分享的UI和HTML代碼。

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

替換您的select聲明並嘗試使用此代碼。讓我們希望這會從你的下拉菜單中點擊「女性」。

+0

嗨阿南德 - 我按照你的建議更新了ID,我還在屏幕截圖中提供了UI屏幕快照和HTML和Xpath信息。 – Curious

+0

@Curious我的回答是否幫助你 –

+0

不,Anand你回答沒有幫助。 – Curious

相關問題