使用java+Selemium实现页面自动化执行

Hi 大家好:

      今天接到了一个需求,客户想通过我们公司项目访问第三方的页面并执行一些操作,这个过程全都需要我们自动执行,并且没有第三方的API,这让我怎么整????黑人问号脸,当时我的第一想法是python,因为Python爬虫的强大甩开了java那么多条街道,然后我开始了疯狂测试,最后又回到了java去模拟登陆等操作,下面我们进入正题

 

这是我的测试dome,可以直接拉去运行。

public static void main(String[] args) throws InterruptedException{
        //获取的是浏览器的驱动地址,我使用的是谷歌,可以自己去官网下载,连接就不写了,我也忘了,    //一会看看能不能发个资源上来,这个驱动是必须要的,因为我遇到的坑就是因为这个驱动
//我不用驱动运行也可以,但是页面不能隐藏,隐藏页面模拟不生效
        System.setProperty("webdriver.chrome.driver", "E:\\webDriver\\chromedriver.exe");// chromedriver服务地址
        ChromeOptions option=new ChromeOptions();
        option.addArguments("disable-infobars");
//下面这行代码就是是否打开页面的状态,默认打开浏览器页面,加上这行以后页面就会隐藏掉了
//        option.addArguments("--headless");
        WebDriver webDriver = new ChromeDriver(option); // 新建一个WebDriver 的对象,但是new 的是谷歌的驱动
        String url = "https://www.ynlykl.com/wp-login.php";
        webDriver.get(url); // 打开指定的网站

        Thread.sleep(3000);

        webDriver.findElement(By.id("user_login")) .sendKeys("gengboxb");
        Thread.sleep(300);
        webDriver.findElement(By.id("user_pass")).sendKeys("*********");
        Thread.sleep(300);
        webDriver.findElement(By.id("wp-submit")).click();

        try {
            webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            webDriver.quit();
        }
        Thread.sleep(3000);
        //说说的Li ID
        Actions builder = new Actions(webDriver);
        builder.moveToElement(webDriver.findElement(By.id("menu-posts-shuoshuo"))).perform();

        Thread.sleep(3000);

        webDriver.findElement(By.linkText("发表说说")).click();

        Thread.sleep(3000);

        webDriver.findElement(By.id("title")) .sendKeys("让我们感谢耿波的账号支持");

        Thread.sleep(300);



        //进入嵌套ifream页面
        WebElement ifreme = webDriver.findElement(By.id("content_ifr"));
        webDriver.switchTo().frame(ifreme);

        Thread.sleep(300);

        WebElement element = webDriver.findElement(By.id("tinymce"));
        List elementList = element.findElements(By.tagName("p"));
        for (WebElement webElement : elementList) {
            webElement.sendKeys("测试网站、账号密码、都是我们耿波童鞋提供的哦!!!");
        }

        Thread.sleep(300);

        webDriver.switchTo().parentFrame();

        Thread.sleep(300);

        webDriver.findElement(By.id("save-post")).click();

        //获取当前浏览器的信息
//        System.out.println("Title:" + webDriver.getTitle());
//        System.out.println("currentUrl:" + webDriver.getCurrentUrl());
        Thread.sleep(3000);
        webDriver.quit();// 退出浏览器
    }

下面给大家贴几个我写这个过程中遇到的比较有帮助的帖子

https://www.cnblogs.com/andrew209/p/9016907.html

https://blog.csdn.net/xiaoguanyusb/article/details/82143753

https://baijiahao.baidu.com/s?id=1608196589844476319&wfr=spider&for=pc

https://www.cnblogs.com/miaojjblog/p/9679915.html

上传本地文件和鼠标点击我还没能兼容,后续完善以后会追加更新!

贴一下POM 



        
        
            org.seleniumhq.selenium
            selenium-java
            3.141.59
        

        
        
            net.sourceforge.htmlunit
            webdriver
            2.6
        


    

 

然后为自己整理一下自己遇到的坑

第一个:上面提到了隐藏页面以后功能就失效了的坑,我个人推断就是因为我没有驱动的原因

第二个:我看了非常多的帖子来看如何定位元素的,然后我才能完善这个dome

第三个:嵌套页面,必须找到嵌套页面的Id 跳进嵌套页面以后才能定位到嵌套页面的元素标签

第四个:退出,整个代码在正式项目中需要使用一个try chtch finally来限制,要保证不管是否正常运行,浏览器都能正常关闭退出,不然你一直运行他就会启动无数个后台进程,并且需要你手动去任务管理器去关闭。

 

完毕,我这个人想到那里就写到哪里,有不懂的可以留言

 

非常欢迎大家能够一起讨论并互相学习进步

你可能感兴趣的:(模拟登录,java,WebDriver,WebDriver,Selemium,自动化测试,模拟登录,java)