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

xiaoxiao2021-02-28  62

首先效果图如下

需求: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(); } /* * 输入用户名与密码并且登录 * * */ 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,致使错误
转载请注明原文地址: https://www.6miu.com/read-74841.html

最新回复(0)