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,致使错误
相关文章推荐
- Selenium之常见元素处理系列四--下拉列表-多选下拉列表元素信息
- Selenium之常见元素处理系列一--单选框(radio)
- Selenium之常见元素处理系列二--check
- Selenium之常见元素处理系列三--upFile(上传文件),应用JavaScript
- selenium下拉框之select处理
- selenium定位select下拉框元素
- Selenium - 下拉选择框select的处理
- Selenium系列之--02常见元素操作总结
- selenium + python处理select标签下拉框的选项
- 处理点击select之外的元素来触发select下拉
- Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载
- seleniumWebDriver的API操作下拉列表Select元素操作_10_2
- selenium执行JavaScript语句:控制滚动条 聚焦元素 改变下拉选项
- 爬虫: find_element系列 元素定位失败常见情况
- Selenium-webdriver系列教程(八)————如何操作select下拉框
- selenium 总结篇,常见方法和页面元素的操作
- 自动化测试工具selenium常见的元素定位方法
- js入门·表单元素(select下拉列表)制作二级联动菜单和网站导航
- selenium之处理下拉列表
- Selenium处理select标签的下拉框