元素定位

1 元素定位法

1.1 findElement和findElements

定位方法为WebDriver中的findElement和findElements方法

  • 不同点:
    findElement返回类型为WebElement对象;findElements返回类型为Web元素列表
    findElement可用于上述八大类型策略;findElements不行,如果没有找到使用给定定位器策略和定位器值的元素,则返回一个空列表

  • 相同点
    都是通过接受by对象作为参数

2 八大元素定位类型

  • id
  • name
  • className
  • linkText
  • partialLinkText
  • tagName
  • cssSelector
  • xpath

2.1 通过id定位

以百度搜索框为例,可以通过id、name、class来定位
在这里插入图片描述

//定位百度搜索框
WebElement input=driver.findElement(By.id("kw"));
//定位“百度一下”按钮
 WebElement button=driver.findElement(By.id("su"));

3 Alert弹框处理

3.1 只有确认的弹框处理

在这里插入图片描述
首先这个页面我们需要点击“试一试”才能出现确认弹框,代码如下(具体操作解释见注释):

//启动浏览器
        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_alert");
        //这个button在frame中,所以我们要切换进这个frame中才能进行定位
        driver.switchTo().frame("iframeResult");
        //定位并点击
        //定位类型:tagName  button为“试一试”按钮的tagName
        driver.findElement(By.tagName("button")).click();
        //切换进入警告弹框
        //accept为弹框确定
        driver.switchTo().alert().accept();

3.2 有确认和取消弹框在这里插入图片描述

       System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_confirm");

        driver.switchTo().frame("iframeResult");
        driver.findElement(By.tagName("button")).click();
        //点击确认按钮
        driver.switchTo().alert().accept();
        //点击取消按钮
        driver.switchTo().alert().dismiss();

3.3 有输入框的弹框在这里插入图片描述

        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_prompt");

        driver.switchTo().frame("iframeResult");
        driver.findElement(By.tagName("button")).click();
        //切换进入警告弹框
        Alert alert=driver.switchTo().alert();
        //向警告弹框中的输入框输入内容
        alert.sendKeys("chaoqiwen");
        //点击确定按钮
        alert.accept();
        //点击取消按钮
        alert.dismiss();

3.4 有提示语的弹框

打印出提示语的内容
在这里插入图片描述

        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_alert_2");

        driver.switchTo().frame("iframeResult");
        driver.findElement(By.tagName("button")).click();
        //切换至提示框并获取提示框的内容后打印
        System.out.println(driver.switchTo().alert().getText());

4 单选、复选、下拉框的处理

4.1 单选框

在这里插入图片描述
sex前规定了选中类型为“redio”(单选)
这里sex中有两个内容,分别是male和female,所以我们在定位时,要使用findElements方法

        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_radio");

        driver.switchTo().frame("iframeResult");
        //把要选择内容放在elements列表里
        List<WebElement> elements=driver.findElements(By.name("sex"));
        //遍历elements列表
        for(WebElement w:elements){
            //选择没有被选中的内容
            if(!w.isSelected()){
                w.click();
            }else {
                //打印选中的内容
                System.out.println(w.getText());
            }
        }

4.2 复选框

在这里插入图片描述
vehicle前规定了选择类型为“checkbox”

       //多选
       System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_checkbox");

        driver.switchTo().frame("iframeResult");
        List<WebElement> checkboxes=driver.findElements(By.name("vehicle"));
        for(WebElement w:checkboxes){
            if(!w.isSelected()){
                w.click();
            }else {
                System.out.println(w.getText());
            }
        }
        //打印复选框的内容
        System.out.println(driver.findElement(By.tagName("form")).getText());

        //单选
        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_checkbox");

        driver.switchTo().frame("iframeResult");
        List<WebElement> checkboxes=driver.findElements(By.name("vehicle"));
        checkboxes.get(1).click();
        System.out.println(driver.findElement(By.tagName("form")).getText());

4.3 下拉框在这里插入图片描述

        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_select");

        driver.switchTo().frame("iframeResult");
        WebElement selectEle=driver.findElement(By.tagName("select"));
        //把定位到的对象转换成真正的select对象
        Select select=new Select(selectEle);
        //根据选择内容选
        select.selectByVisibleText("Audi");
        Thread.sleep(2000);//等待两秒方便观察
        //根据下标选
        select.selectByIndex(0);
        Thread.sleep(2000);
        //根据value选
        select.selectByValue("audi");

5 拖拽处理

浏览器页面最大化的方法

      //启动浏览器
        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        
        //浏览器的最大化
        driver.manage().window().maximize();
        
        driver.get("https://www.jqueryui.org.cn/demo/5621.html");

5.1 拖拽框

拖拽使用actions.dragAndDropBy(WebElement source, int xOffset, int yOffset)方法,source为之前定位好的需要拖住的拖拽框,xOffset为拖拽框变化的横坐标,从左至右为x轴正方形,yOffset为拖拽框变化的纵坐标,从上倒下为y轴的正方向
perform()为执行操作

在这里插入图片描述

        //启动浏览器
        System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.jqueryui.org.cn/demo/5621.html");

        //利用css定位
        WebElement item1=driver.findElement(By.cssSelector(".ui-state-default"));

        //拖拽使用actions方法
        Actions action=new Actions(driver);
        action.dragAndDropBy(item1,0,60).perform();

6 cookie处理

6.1 cookie绕过登陆

过程:
1、先手动登陆
2、使用chrome开发者工具获取cookie信息
3. 将获取的cookie信息使用脚本添加
4. 访问登录后页面,登录成功

在这里插入图片描述
具体代码实现如下,但因为百度网站有安全校验,所以这种方式是不能进入登陆后的页面,方法学习可供参考

        System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver2");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");

        Cookie cookie1=new Cookie("BIDUPSID","F0E81AB20F486944796E96E496B14780");
        Cookie cookie2=new Cookie("PSTM","1573790991");
        Cookie cookie3=new Cookie("BD_UPN","123253");
        Cookie cookie4=new Cookie("BAIDUID","05708FF85006AB13F2EBFDC812669314");
        Cookie cookie5=new Cookie("FG","1");
        Cookie cookie6=new Cookie("COOKIE_SESSION","62_1_8_6_58_49_0_6_7_7_1820_6_91852_1579082211_16_3_1579082234_1579082221_1579082218%7C9%2362_78_1579082218%7C9");
        Cookie cookie7=new Cookie("H_PS_PSSID","1435_21105_18560_22157");
        Cookie cookie8=new Cookie("BDRCVFR[feWj1Vr5u3D]","I67x6TjHwwYf0");
        Cookie cookie9=new Cookie("delPer","0");
        Cookie cookie10=new Cookie("BD_CK_SAM","1");
        Cookie cookie11=new Cookie("BDORZ","B490B5EBF6F3CD402E515D22BCDA1598");
        Cookie cookie12=new Cookie("PSINO","5");
        Cookie cookie13=new Cookie("H_PS_645EC","6a0ah1JpGt1K%2FDz2Vcco2L8HCEYPzqCtWCELZlPnQBbzvuWAazplK8kA45vVqN4Oh0eL");
        Cookie cookie14=new Cookie("BDUSS","nd-elVuZ3dock8xSXRXdVktREY4bTZNS0h4THpTblMtTnJ4ZzZyOEZMR3dSMHBlSVFBQUFBJCQAAAAAAAAAAAEAAADqsutHQ0hBT1FJV0VOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALC6Il6wuiJeQ");
        Cookie cookie15=new Cookie("BD_HOME","1");
        Cookie cookie16=new Cookie("sugstore","0");



        //添加cookie
        driver.manage().addCookie(cookie1);
        driver.manage().addCookie(cookie2);
        driver.manage().addCookie(cookie3);
        driver.manage().addCookie(cookie4);
        driver.manage().addCookie(cookie5);
        driver.manage().addCookie(cookie6);
        driver.manage().addCookie(cookie7);
        driver.manage().addCookie(cookie8);
        driver.manage().addCookie(cookie9);
        driver.manage().addCookie(cookie10);
        driver.manage().addCookie(cookie11);
        driver.manage().addCookie(cookie12);
        driver.manage().addCookie(cookie13);
        driver.manage().addCookie(cookie14);
        driver.manage().addCookie(cookie15);
        driver.manage().addCookie(cookie16);

        //进入登陆后的页面
        driver.get("http://i.baidu.com");

Logo

更多推荐