selenium webdriver如何操作select下拉框


1、給下來框賦予值(網上轉載)

selenium webdriver處理select下拉框,具體例子如下

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class SelectsStudy {
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
  WebDriver dr = new FirefoxDriver();
  dr.get("http://passport.51.com/reg2.5p");
  
  //通過下拉列表中選項的索引選中第二項,即2011年
  Select selectAge = new Select(dr.findElement(By.id("User_Age")));
  selectAge.selectByIndex(2);
  
  //通過下拉列表中的選項的value屬性選中"上海"這一項
  Select selectShen = new Select(dr.findElement(By.id("User_Shen")));
  selectShen.selectByValue("上海");
  
  //通過下拉列表中選項的可見文本選中"浦東"這一項
  Select selectTown = new Select(dr.findElement(By.id("User_Town")));
  selectTown.selectByVisibleText("浦東");
  
  //這里只是想遍歷一下下拉列表所有選項,用click進行選中選項
  Select selectCity = new Select(dr.findElement(By.id("User_City")));
  for(WebElement e : selectCity.getOptions())
   e.click();
 }
}
從上面可以看出,對下拉框進行操作時首先要定位到這個下拉框,new 一個Selcet對象,然后對它進行操作。

2、Select 常用到的方法:

方法 說明
void deselectAll() 取消所有選擇項,僅對下拉框的多選模式有效,若下拉不支持多選模式,則會拋出異常 UnsupportedOperationException(不支持的操作)
void deselectByIndex(int index) 取消指定index的選擇,index從零開始,僅對多選模式有效,否則拋出異常 UnsupportedOperationException(不支持的操作)
void deselectByValue(String value) 取消Select標簽中,value為指定值的選擇,僅對多選模式有效,否則拋出異常 UnsupportedOperationException(不支持的操作)
void deselectByVisibleText(String Text) 取消項的文字為指定值的項,例如指定值為Bar,項的html為 <option value="foo">Bar</option>,僅對多選模式有效,單選模式無效,但不會拋出異常
List<WebElement>getAllSelectedOptions()  獲得所有選中項,單選多選模式均有效,但沒有一個被選中時,返回空列表,不會拋出異常
WebElement getFirstSelectedOption()  獲得第一個被選中的項,單選多選模式均有效,當多選模式下,沒有一個被選中時,會拋出NoSuchElementException異常
List<WebElement>getOptions()  獲得下拉框的所有項,單選多選模式均有效,當下拉框沒有任何項時,返回空列表,不會拋出異常
boolean isMultiple()  判斷下拉框是否多選模式
void selectByIndex(int index) 選中指定index的項,單選多選均有效,當index超出范圍時,拋出NoSuchElementException異常
void selectByValue(String value) 選中所有Select標簽中,value為指定值的所有項,單選多選均有效,當沒有適合的項時,拋出NoSuchElementException異常
void selectByVisibleText(String text) 選中所有項的文字為指定值的項,與deselectByValue相反,但單選多選模式均有效,當沒有適合的項時,拋出NoSuchElementException異常

 

2、selenium  webdriver如何獲得select option 選中的值

HTMl:

 

java代碼:

實現方法一:

 

List<WebElement> list = dr.findElement(By.id("update_repaymentDateType")).findElements(By.tagName("option"));//獲取所有的option元素
System.out.println(list.size());
for(int i=0;i<list.size();i++) {//循環找到被選中的那個option
  if(null!=list.get(i) && "true".equals(list.get(i).getAttribute("selected"))) {//注意:如果把”true“寫到equals后面,那么當 list.get(i)獲取的元素中無selected屬性時則就會報空指針異常
 System.out.println(list.get(i).getText());
	break;
}else {
	continue;
	}
}

 

實現方法二:

Select s=fSelect(dr, By.id("update_repaymentDateType"));
List<WebElement> list = s.getAllSelectedOptions();//獲取被選中的options數組
System.out.println(list.get(0).getText());

  

 3、有多個select時,且所有select的屬性都相同,如何准確定位到具體的某個select(寫這方面的腳本時可以先用selenium IDE錄制一套腳本,即可用輕松看出其獲取元素的方法)

HTML界面:

java代碼:

實現方法一:

 

//新選擇一個還款日(當ID和name都不是唯一時,那么就從標簽的最外層一層一層的往下層標簽定位)
	Select sele=fSelect(dr, By.xpath("(//*[@id='update_repaymentDate'])[2]")); //select的xpath://*[@id="update_repaymentDate"]  
       sele.selectByValue("4");

 說明:以上是通過select的xpath獲取的,且在xpath上加上一對” () “和" 【2】 "即可指的就是獲取到的是第二個select

            select的 原始xpath://*[@id="update_repaymentDate"]

          獲取具體某個select時則把xpath更改為:(//*[@id='update_repaymentDate'])[2]

 實現方法二:獲取所有的select然后循環操作

  

List<WebElement> listl = dr.findElement(By.id("repaymentDate_span_select2")).findElements(By.tagName("select"));
int size = dr.findElement(By.id("repaymentDate_span_select2")).findElements(By.tagName("select")).size();
System.out.println(size);
Select sl = new Select(listl.get(1));//獲取第二個select
sl.selectByIndex(3);

具體例子如下:

HTML界面:(添加產品時選擇兩個產品)

java代碼:

 //產品構成(添加兩個產品)
		WebElement addbutton=fFind(dr, By.id("product_div_01")).findElement(By.tagName("input"));//點擊第一個加號按鈕
		addbutton.click();
		Select select=null;//創建一個空對象
		int inde=31;//定義一個產品在excel中的第幾行
	   List<WebElement>  ww=fFinds(dr, By.name("productIds"));
	   int size=ww.size();
	   int size1=size-1;//程序中當點擊+按鈕時會新增一個產品下拉列表框,而新的下拉列表框這部分代碼直接寫死在了程序中,所要減去那個多余的下拉列表框
	   for (int i = 0; i < size1; i++) {
		select=new Select(ww.get(i));
		inde=inde+i;
		select.selectByVisibleText(Demo.getExcel(index, inde, colNum));

  

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com