selenium操作笔记-java

创建ChromeDriver

private ChromeDriver driver = new ChromeDriver(
	new ChromeOptions().addArguments("--remote-allow-origins=*"));

定义打开关闭方法

	//打开网址
 public void start_test(){
        driver.get("http://www.baidu.com");
 }
     //关闭浏览器
public void end_test(){
        driver.quit();
}

网页定位方法

public void pos_test() throws InterruptedException {
        //css选择器
        String str = driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).getText();
        System.out.println("news: "+ str);

        //xpath选择器
        driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("Apex");
        driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
        Thread.sleep(3000);
        driver.findElement(By.xpath("//*[@id=\"m6004743517_canvas\"]/div/div/div[2]/div/a"));

        String str = driver.findElement(By.xpath("//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a/span[2]")).getText();
        System.out.println("结果: "+ str);
    }
    
public void operate_test() throws InterruptedException {
        //点击行为
        driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a/span[2]")).click();

        //提交行为
        driver.findElement(By.cssSelector("#kw")).sendKeys("Apex");
        driver.findElement(By.cssSelector("#su")).submit(); //click是点击,submit是提交(submit操作按钮或者能回车提交的地方)

        //按键模拟输入和clear()
        driver.findElement(By.cssSelector("#kw")).sendKeys("Apex"); //可以输入任何字符
        driver.findElement(By.cssSelector("#kw")).clear();
        driver.findElement(By.cssSelector("#kw")).sendKeys("again");

        //gettext()获取文本和getAttribute()标签
        //<input type="submit" id="su" value="百度一下" class="bg s_btn">
        String str = driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).getText();
        String str2 = driver.findElement(By.cssSelector("#su")).getAttribute("value");  //里面放属性名用于获取属性值
        System.out.println("getText: "+ str);
        System.out.println("getAttribute: "+ str2);
    }

    //等待(代码执行很快,前端页面渲染速度相对较慢,可能代码已经执行到下一步,页面还没渲染结束,导致下一条命令找不到页面元素而报错)
public void wait_test() throws InterruptedException {
        driver.findElement(By.cssSelector("#kw")).sendKeys("Apex");
        driver.findElement(By.cssSelector("#su")).click();
        //强制等待
        Thread.sleep(3000); //等待渲染,以防报错

        //隐式等待(作用在整个生命周期,只要写在方法内就行)
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));   //设置时间范围为3秒
        
        //显示等待
        WebDriverWait foo = new WebDriverWait(driver,Duration.ofSeconds(3));
        foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#kw")));
        foo.until(ExpectedConditions.textToBe(By.cssSelector(""),"Apex"));
        //WebDriverWait第一个参数:webdriver对象 第二个参数:Duration类方法(设置时间方法)
        //ExpectedConditions里有很多方法,自行查看。
        // presenceOfElementLocated()是查看当前元素是否存在
        //textToBe()检查页面元素对应的文本我是否正确    第一个参数:元素位置,第二个参数:期望得到文本值
        driver.findElement(By.cssSelector("#m6004743517_canvas > div > div > div.tenon_pc_comp_columbus_banner_content_container > a"));
    }
}

等待分为强制等待,隐式等待,显示等待

强制等待
优点:语法简单,适合调试的时候用
缺点:等待时间固定,如果web自动化数量多,造成大量时间消耗,减少自动化测试效率

隐式等待:在规定时间范围内,轮询等待元素出现之后就立即结束,超过时间没找到会抛出noSuchElement异常
优点:节省时间
缺点:需要等待所有元素都展现才会执行下一步,仍然会有时间上的消耗

显示等待:针对某一个元素进行等待,直到满足条件,超出时间抛出异常
优点:针对性,极大的降低自动化整体的等待时间
缺点:写法更为复杂

进入www.baidu.com后跳转到新网页的获取问题

//打印
public void print_test() throws InterruptedException {
        //进入后点击超链接
        driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a")).click();
        Thread.sleep(2000);
        //获取标题
        String title = driver.getTitle();
        System.out.println("title: " + title);
        //获取url
        String url = driver.getCurrentUrl();
        System.out.println("url: " + url);
}

此处点击超链接后,获取的title和url仍然是原网页的信息,想要切换到操作新页面,需要用到页面的句柄(唯一标识)
用switchTo()跳转

public void changewindow_test() throws InterruptedException {
        //每个页面都有一个句柄(唯一标识)
        //获取当前页面句柄
        String curwindow = driver.getWindowHandle();
        System.out.println("curwindow-handle: " + curwindow);
        driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a")).click();
        Thread.sleep(2000);
        //获取所有页面句柄
        Set<String> allwindow = driver.getWindowHandles();
        for(String window:allwindow){
            if(window != curwindow){
                //跳转到该页面
                driver.switchTo().window(window);
            }
            System.out.println("the Set have: " + window);
        }
    }

窗口设置

public void window_test() throws InterruptedException {
        driver.manage().window().maximize();
        Thread.sleep(2000);
        driver.manage().window().minimize();
        Thread.sleep(2000);
        driver.manage().window().setSize(new Dimension(1000,800));  //填入宽度,高度
        Thread.sleep(2000);

        //selenium不能直接编译js语言,但可以通过executeScript()方法使用
        //跳转到头
        driver.executeScript("window.scroll(0,document.body.scrollHeight)");
        //跳转到尾
        driver.executeScript("window.scroll(0,document.body.scrollTop)");
}

导航

navigate()方法

public void navigate_test() throws InterruptedException {
        //进入一个页面进行前进和后退操作,该操作不能用于网页跳转
        driver.manage().window().maximize();
        Thread.sleep(2000);
        driver.findElement(By.cssSelector("#nav > div > div > ul > li:nth-child(1) > a")).click();
        Thread.sleep(2000);
        //后退
        driver.navigate().back();
        Thread.sleep(2000);
        //前进
        driver.navigate().forward();
        Thread.sleep(2000);
}

弹窗

用Alert对象处理

public void alert_test() throws InterruptedException {
        //普通弹窗操作
        //点击后出现弹窗
        driver.findElement(By.cssSelector("#show")).click();
        //点击按钮,关闭弹窗
        driver.findElement(By.cssSelector("关闭按钮的selector")).click();
        Thread.sleep(2000);

        //无法在前端定位按钮的弹窗(如:警告弹窗,确认弹窗),使用selenium中提供的Alert接口来处理
        driver.findElement(By.xpath("//*[@id=\"tooltip\"]")).click();
        //创建Alert对象
        Alert alert = driver.switchTo().alert();
        //确认按钮
        alert.accept();
        //取消按钮
        alert.dismiss();

        //不能定位的带输入框的弹窗
        driver.findElement(By.cssSelector("元素的xpath")).click();
        Alert alert2 = driver.switchTo().alert();
        alert2.sendKeys("test");
        alert2.accept();
}

键盘和鼠标

Actions对象

public void mouseAndKeyboard_test() throws InterruptedException {
        driver.manage().window().maximize();
        Thread.sleep(2000);
        //模拟鼠标移动到想要的元素上,并点击
        WebElement ele = driver.findElement(By.cssSelector("#nav > div > div > ul > li:nth-child(1) > a"));    //找到元素
        Actions actions = new Actions(driver);
        actions.clickAndHold(ele).perform();    //perform()是显示,可不加
        actions.click(ele).perform();

        //键盘
        WebElement ele = driver.findElement(By.cssSelector("#kw"));
        ele.sendKeys("test");
        //driver.findElement(By.cssSelector("#kw")).sendKeys("test");
    }

选择框

public void select_test(){
        WebElement ele = driver.findElement(By.cssSelector("#shoppingMethod"));
        Select select = new Select(ele);
        //通过索引(索引从0开始)
        select.selectByIndex(0);
        //通过value
        select.selectByValue("value值");
        //通过可见文本
        select.selectByVisibleText("直接放文本");
}

文件上传

页面中点击文件上传会弹出系统窗口,selenium不能操作系统窗口。
通过sendkeys()输入文件路径达到上传目的

public void fileupload_test(){
        //地位到文件上传按钮
        WebElement ele = driver.findElement(By.cssSelector("selector"));
        ele.sendKeys("文件路径地址");
}

屏幕截图

代码执行速度比网页渲染速度快,用截图可以清楚代码执行时,页面状态,了解报错。
getScreenshotAs()方法,参数OutputType.x,x可以选择FILE,Base64,bytes。

public void screenshot_test() throws IOException {
        //driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //百度搜索关键词并验证结果页
        driver.findElement(By.cssSelector("#kw")).sendKeys("Apex");
        driver.findElement(By.cssSelector("#su")).click();
        //屏幕截图
        File srcFile = driver.getScreenshotAs(OutputType.FILE);
        //保存截图到指定位置
        File filename = new File("./src/test/autoPic/test2.png");
        FileUtils.copyFile(srcFile,filename);
        driver.findElement(By.cssSelector("#m6004743517_canvas > div > div > div.tenon_pc_comp_columbus_banner_content_container > a"));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值