首先效果图如下
需求: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
元素不可见:当前元素不可见或者不能操作
WebElement job
=driver
.findElement(
By.id(
"job"));
Select downList
=new Select(job);
原因:
原则上我们认为id具有唯一性,但是实际上id等于job的元素有很多,它有一些是隐藏的,所以我们找
"id=job"的元素,由于有很多,系统无法识别,所以失败
我们发现编辑栏中除了
"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()
}
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
元素不可见:当前元素不可见或者不能操作