美文网首页
特殊元素定位和操作(二)

特殊元素定位和操作(二)

作者: testerPM | 来源:发表于2020-01-16 17:49 被阅读0次

    ---------------------------------------------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");
    
    
    

    相关文章

      网友评论

          本文标题:特殊元素定位和操作(二)

          本文链接:https://www.haomeiwen.com/subject/ivzoactx.html