package org.sky.auto.element;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.Select;
import org.sky.auto.base.AutoBase;
import org.sky.auto.exception.MyAutoException;
public class ComoboBox extends SElement{
static Logger logger = Logger.getLogger(ComoboBox.class);
private WebElement element;
private Select select;
public WebElement getElement() {
return element;
}
public void setElement(WebElement element) {
this.element = element;
}
public ComoboBox(){
this.element=new RemoteWebElement();
setSelect(new Select(element));
}
public ComoboBox(By by){
this.element=AutoBase.driver().findElement(by);
setSelect(new Select(element));
}
public ComoboBox(WebElement element){
this.element=element;
setSelect(new Select(element));
}
public Select getSelect() {
return select;
}
public void setSelect(Select select) {
this.select = select;
}
/**根据comobobox中的索引值来进行选择,索引值从0开始的
* @param index 要选择的索引号
* */
public void selectByIndex(int index){
if(isExist()){
getSelect().selectByIndex(index);
logger.info(">>["+this.getId()+"]选择第"+index+"选项成功!");
}else{
logger.error("元素不存在,通过索引值"+index+"查找失败!");
throw new MyAutoException("["+this.getId()+"]通过索引进行选择的时候失败了,这个元素不存在,没有被找到!");
}
}
/**
* 通过comobox中的内容进行选择,value属性值
* @param value 要选择项的内容
* */
public void selectByValue(String value){
if(isExist()){
getSelect().selectByValue(value);
logger.info(">>["+this.getId()+"]选择"+value+"所在项成功!");
}else{
logger.error("元素不存在,通过值"+value+"查找失败!");
throw new MyAutoException("["+this.getId()+"]通过内容查找元素的时候失败了!这个元素不存在,没有被找到!");
}
}
/**通过comobobox标签之间的内容来进行选择
* @param value 要选择的项的内容值
* */
public void selectByVisiableText(String text){
if(isExist()){
select.selectByVisibleText(text);
logger.info(">>["+this.getId()+"]选择值为"+text+"所在项成功!");
}else{
logger.error("元素不存在,通过内容值"+text+"查找失败!");
throw new MyAutoException("["+this.getId()+"]通过标签之间的内容来进行查找的时候失败了,这个元素没有被找到!");
}
}
/**获得当前选中项的索引值*/
public int getSelectedIndex(){
int selectedIndex=-1;
if(isExist()){
List<WebElement> allItems = new ArrayList<WebElement>();
WebElement selectedItem=getSelect().getFirstSelectedOption();
for(int i=0;i<allItems.size();i++){
if(allItems.get(i).equals(selectedItem)){
selectedIndex=i;
}
}
logger.info(">>["+this.getId()+"]获得选中项的索引值成功!");
return selectedIndex;
}else{
logger.error("元素不存在,获得选中项的索引值失败!");
throw new MyAutoException("["+this.getId()+"]获取当前项的索引值的时候出现了错误!可能的原因是这个元素不存在");
}
}
/**获得当前选中项的内容*/
public String getSelectedValue(){
String value=null;
if(isExist()){
value=getSelect().getFirstSelectedOption().getText();
logger.info(">>["+this.getId()+"]获得选中项的索引值成功!");
return value;
}else{
logger.error("元素不存在,获得当前选中项内容失败!");
throw new MyAutoException("["+this.getId()+"]获取当前项的内容的时候出现了错误!可能的原因是这个元素定位错误没有找到!");
}
}
/**如果选择了多项,那么使用此方法可以获得多个选项*/
public String[] getSelectedValues(){
String[] values;
if(isExist()){
List<WebElement> selectedItems =getSelect().getAllSelectedOptions();
values=new String[selectedItems.size()];
for(int i=0;i<selectedItems.size();i++){
values[i]=selectedItems.get(i).getText();
}
logger.info(">>["+this.getId()+"]获得全部选中项内容成功");
return values;
}else{
logger.error("元素没有找到,获得内容失败!");
throw new MyAutoException("["+this.getId()+"]获取多个元素的时候失败了!可能的原因是这个元素不存在,没有被找到!");
}
}
/**如果选择了多项,那么使用此方法可以获得多个选项的索引值*/
public int[] getSelectedIndexs(){
int[] indexs = null;
if(isExist()){
List<WebElement> selectedItems =getSelect().getAllSelectedOptions();
List<WebElement> allItems = getSelect().getOptions();
indexs=new int[selectedItems.size()];
for(int i=0;i<selectedItems.size();i++){
for(int j=0;j<selectedItems.size();j++){
if(selectedItems.get(i).equals(allItems.get(j))){
indexs[i]=j;break;
}
}
}
logger.info(">>["+this.getId()+"]获得全部选中项内容成功");
return indexs;
}else{
logger.error("元素没有找到,获得索引值失败!");
throw new MyAutoException("["+this.getId()+"]获取多个索引值的时候失败!可能的原因是这个元素没有找到!");
}
}
/**获得控件里面的大小*/
public int getComoboBoxSize(){
int size=-1;
if(isExist()){
size= getSelect().getOptions().size();
logger.info(">>["+this.getId()+"]得到comobox的大小为-->"+size);
return size;
}else{
logger.error("元素不存在,返回comobox的大小失败!");
throw new MyAutoException("["+this.getId()+"]获取控件大小的时候出现了错误!可能的原因是这个元素不存在");
}
}
/**通过随机数来获得select的option的项*/
public void selectByRandomIndex(){
if(isExist()){
Random r=new Random();
int max=getSelect().getOptions().size();
int random=r.nextInt(max);
getSelect().selectByIndex(random);
logger.info(">>["+this.getId()+"]选择了第"+getSelectedIndex()+"项,并且值为"+getSelectedValue());
}else{
throw new MyAutoException("["+this.getId()+"]获取控件大小的时候出现了错误!可能的原因是这个元素不存在!");
//logger.error("元素查找失败,没有找到相关的随即项!");
}
}
}