您的位置:首页 > 其它

Selenium之常见元素处理系列四--下拉框Select

2017-09-01 12:45 344 查看

首先效果图如下



需求:1.首先登陆慕课网

需求:2.进入到个人设置页面

需求:3.操作下拉框更改信息

代码:

package com.wushuai.test;

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

public class SelectTest {
public WebDriver driver;
//初始化chrome浏览器驱动
public void initDriver()
{
System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");
//初始化chrome浏览器
driver=new ChromeDriver();
driver.get("http://www.imooc.com/user/newlogin/from_url/");
//屏幕最大化
driver.manage().window().maximize();
}
/*
* 输入用户名与密码并且登录
*
* */
public void inputBox() {
//输入账号
driver.findElement(By.name("email")).sendKeys("123456@qq.com");
try {
//睡眠两秒
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//清除账号
driver.findElement(By.name("email")).clear();
String s=driver.findElement(By.name("email")).getAttribute("placeholder");
//打印信息
System.out.println(s);
/*
*
* 输入用户名与密码并点击登录
*
* 这里主要是为了在个人设置操作打下铺垫
* */
driver.findElement(By.name("email")).sendKeys("m13031155057@163.com");
driver.findElement(By.name("password")).sendKeys("123456");
driver.findElement(By.className("btn-red")).click();;
try {
//睡眠两秒
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/*
* 下拉框操作
* */
public void dowmsSelectBox() {
//进入慕课网个人信息页面
driver.get("http://www.imooc.com/user/setprofile");
//找到并点击"编辑"按钮
driver.findElement(By.className("pull-right")).click();
//休眠一秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//找到下拉框Select的id
WebElement job=driver.findElement(By.id("job"));
//创建selenium自带的类进行下拉框定位
Select downList=new Select(job);
//职位选择第二个元素
downList.selectByIndex(2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个对象
SelectTest st=new SelectTest();
//调用chrome浏览器驱动初始化方法
st.initDriver();
//调用登录方法
st.inputBox();
//调用下拉框操作方法
st.dowmsSelectBox();

}

}


此时报错如下:

element not visible: Element is not currently visible and may not be manipulated
元素不可见:当前元素不可见或者不能操作
//报错定位到代码:
//找到下拉框Select的id
WebElement job=driver.findElement(By.id("job"));
//创建selenium自带的类进行下拉框定位
Select downList=new Select(job);

//也就是说我们"id为job的元素查找失败"
原因:
原则上我们认为id具有唯一性,但是实际上id等于job的元素有很多,它有一些是隐藏的,所以我们找"id=job"的元素,由于有很多,系统无法识别,所以失败

//解决思路:
//我们可以查找"id为唯一性"的标签元素即可解决


我们发现编辑栏中除了"select"具有"id"属性外,另外一个就是"form"表单具备"id唯一性的特性了",那么我们完全可以通过先查找到form表单,然后再查找到select即可,这样主次分明,Nice!
详情见下图:




代码的正确姿势:

需要注意的是:为下拉框赋值我们有三种方法:
1.通过"index"-纯数字
2.通过"Value"值-要注意这个value值是根据html中的设定来定的
3.通过"Text"文本值-完全根据文本内容设定
图示如下:




package com.wushuai.test;

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

public class SelectTest {
public WebDriver driver;
//初始化chrome浏览器驱动
public void initDriver()
{
System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");
//初始化chrome浏览器
driver=new ChromeDriver();
driver.get("http://www.imooc.com/user/newlogin/from_url/");
//屏幕最大化
driver.manage().window().maximize();
}
/*
* 输入用户名与密码并且登录
*
e6e4

* */
public void inputBox() {
//输入账号
driver.findElement(By.name("email")).sendKeys("123456@qq.com");
try {
//睡眠两秒
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//清除账号
driver.findElement(By.name("email")).clear();
String s=driver.findElement(By.name("email")).getAttribute("placeholder");
//打印信息
System.out.println(s);
/*
*
* 输入用户名与密码并点击登录
*
* 这里主要是为了在个人设置操作打下铺垫
* */
driver.findElement(By.name("email")).sendKeys("m13031155057@163.com");
driver.findElement(By.name("password")).sendKeys("123456");
driver.findElement(By.className("btn-red")).click();;
try {
//睡眠两秒
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/*
* 下拉框操作
* */
public void dowmsSelectBox() {
//进入慕课网个人信息页面
driver.get("http://www.imooc.com/user/setprofile");
//找到并点击"编辑"按钮
driver.findElement(By.className("pull-right")).click();
//休眠一秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//先找到form表单的id
WebElement form=driver.findElement(By.id("profile"));
//通过form表单再找到下拉框Select的id
WebElement job=form.findElement(By.id("job"));
//创建selenium自带的类进行下拉框定位
Select downList=new Select(job);
/*
* 以下三种方式任选一种为下拉框赋值
* */
//通过index为下拉框赋值
//downList.selectByIndex(2);
//通过Value为下拉框赋值
downList.selectByValue("4");
//通过Text文本为下拉框赋值
//downList.selectByVisibleText("JAVA开发工程师");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个对象
SelectTest st=new SelectTest();
//调用chrome浏览器驱动初始化方法
st.initDriver();
//调用登录方法
st.inputBox();
//调用下拉框操作方法
st.dowmsSelectBox();

}

}


总结:

1.虽然id原则上是唯一性的,但不排除隐藏的情况,要确保id查找的时候的唯一性
2.注意form表单与Select下拉框的层级性,先找form,在通过form查找select
3.报错收集:
element not visible: Element is not currently visible and may not be manipulated
元素不可见:当前元素不可见或者不能操作

//解读:元素查找不到,可能包含多个相同的id,致使错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: