---------------------------------------------radio/checkbox---------------------------
radio:单选按钮
允许用户在有限数量的选项中选择其中之一
checkbox: 多选按钮
允许用户在有限数量的选项中选择多个选项
选中:
element.click();
是否选中:
element.selected();
(1) radio
openBrowser("chrome");
driver.get("D:\\\\workspace2018\\\\demo\\\\单选多选框\\\\radio.html");
WebElement element = driver.findElement(By.cssSelector("input[value=\"female\"]"));
System.out.println("点击之前是否被选中: " + element.isSelected());//输出false
element.click();//选中female
System.out.println("点击之后是否被选中: " + element.isSelected());//输出 true
(2) checkbox
openBrowser("chrome");
driver.get("D:\\\\workspace2018\\\\demo\\\\单选多选框\\\\checkbox.html");
//多选:选中数学&体育
driver.findElement(By.cssSelector("input[value=\"Math\"]")).click();;
driver.findElement(By.cssSelector("input[value=\"Sport\"]")).click();;
(3) select下拉框
下拉框处理类:Select
如果页面元素是一个下拉框,我们可以将此web元素封装成Select对象
Select常用api
select.getPtions();//获取所有选项
select.selectByIndex(index);//根据索引选中对应的元素
select.selectByValue(value);//根据元素的value属性值选中元素
select.selectByVisibleText(text);//选中文本值对应的选项
select.isMultiple();//判断是不是多选的选择框,是,返回true
select.deselectAll();//取消所有选中的选项(取消选中只能用在多选的选择框,如果是单选,不能用取消选中的api)
openBrowser("chrome");
driver.get("D:\\\\workspace2018\\\\demo\\select\\mult-select.html");
// 复选(多选)下拉框
// 1.定位到下拉框
WebElement element = driver.findElement(By.cssSelector("select[id='m-select']"));
// 2.将下拉框 封装成select对象
Select select = new Select(element);
// 3.选择下拉框中的第三个元素和第五个元素
select.selectByIndex(2);// 通过索引选择,默认从0开始,选择第3个元素
select.selectByIndex(4);// 选择第5个元素
select.selectByValue("6");// 通过下拉元素的value属性选择,这里的value=6
select.selectByVisibleText("mysql");// 通过下拉元素的文本值选择,这里的文本值是 text=mysql
Thread.sleep(2000);
// 4.取消选择第三个和第五个元素
//select.deselectByIndex(2);// 通过索引取消选择的元素,索引从0开始
//select.deselectByIndex(4);//取消选中的第5个元素
select.deselectAll();//取消选中的所有元素
(4)时间控件
控件没有限制手动输入,则直接调用sendKeys方法写入时间数据
控件有限制输入,则可以执行一段js来改变元素的value属性值
案例:
飞猪
12306时间选择框
javascript
某些特殊情况下,使用selenium的api无法操作页面元素,可以考虑使用js来完成
比如上面的时间插件只允许通过选择完成,不允许输入,那么调用sendKeys写入数据就走不通了,但是又不想通过一组复杂的鼠键操作
就可以考虑通过执行一段js来操作这个元素
执行方式:
JavascriptExecutor jsExecutor=(JavascriptExecutor)driver;
----------------------------------------------时间可输入-----------------------------------
openBrowser("chrome");
driver.get("https://www.fliggy.com/?ttid=sem.000000736&hlreferid=baidu.082076&route_source=seo");
//日期时间选择款
//1.时间可手动输入
WebElement element = driver.findElement(By.xpath("//form[@id=\"J_FlightForm\"]//input[@name='depDate']"));
//2.输入日期
element.sendKeys("2020-01-17");
---------------------------------------------时间不可输入-------------------------------------
openBrowser("chrome");
driver.get("https://www.12306.cn/index/");
Thread.sleep(3000);
// 时间不可手动输入
// 1.找到时间选择输入框
WebElement element = driver.findElement(By.xpath("//input[@id='train_date']"));
// 2.通过js代码移除readonly属性
// 2.1 需要创建js的可执行对象
JavascriptExecutor jse = (JavascriptExecutor) driver;
// 2.2
// executeScript()方法即可执行js---document.getElementById('train_date').removeAttribute('readonly');//f12console
jse.executeScript("document.getElementById('train_date').removeAttribute('readonly')");
// 2.3清除默认日期
element.clear();
// 2.4 输入日期
element.sendKeys("2020-01-17");
上面是通过创建js的执行对象,执行js代码定位到元素
下面通过selenium 原生的定位元素方式,将元素传给js
-----------------------------------java代码和js交互----------------------------------
openBrowser("chrome");
driver.get("https://www.12306.cn/index/");
// 1.找到时间选择输入框
WebElement element = driver.findElement(By.xpath("//input[@id='train_date']"));
String str = "readonly";
// 2.通过js代码移除readonly属性
// 2.1 需要创建js的可执行对象
JavascriptExecutor jse = (JavascriptExecutor) driver;
// 2.2 java和js做交互,将java的值传给js去执行
// arguments[i]数组来接收java传过来的值,索引从0开始,0代表第一个参数
// arguments[0]=element;arguments[1]=str,多个参数用逗号隔开
jse.executeScript("arguments[0].removeAttribute(arguments[1])", element, str);
// 2.3清除默认日期
element.clear();
// 2.4 输入日期
element.sendKeys("2020-01-17");
网友评论