龙空技术网

Web应用程序测试工具Selenium

韭心博度 205

前言:

眼前同学们对“测试工具selenium”大概比较注重,姐妹们都想要剖析一些“测试工具selenium”的相关内容。那么小编同时在网络上汇集了一些对于“测试工具selenium””的相关知识,希望同学们能喜欢,咱们快快来学习一下吧!

Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序是否能够很好得工作在不同的浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。

以selenium获取支付宝账单记录为例,具体思路通过selenium模拟用户登录支付宝,然后跳转支付宝账单页面通过xpath定位账单的dom,然后解析dom,获取到账单列表的数据,每过3分钟刷新一下账单信息,这样有数据变化的话可以写一个回调函数,这样就实现了支付宝免签。经测试在服务器环境会出现验证码情况,支付宝应该做了安全验证,解决验证码需要用到机器学习,这里不解决,个人使用是不会出现安全验证的,可以自己使用。

首先准备开发环境需要三样东西(使用java编程)

chrome浏览器

chrome驱动必须和chrome版本相匹配,驱动当中的特征字符传需要替换掉,否则会让网站检测到,出现验证码

 <dependency>            <groupId>org.seleniumhq.selenium</groupId>            <artifactId>selenium-server</artifactId>            <version>4.0.0-alpha-2</version>        </dependency>
关键代码逻辑实现
       Resource resource = resourceLoader.getResource("classpath:chrome/chromedriver.exe");       System.setProperty("webdriver.chrome.driver", resource.getFile().getAbsolutePath());        chromeOptions = new ChromeOptions();        chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));        chromeOptions.setExperimentalOption("useAutomationExtension", false);        chromeOptions.addArguments("--disable-blink-features=AutomationControlled");        ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);            try {//最大化窗口                chromeDriver.manage().window().maximize();                chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);                // get()打开一个登录站点                chromeDriver.get(";);                Thread.sleep(2000);                chromeDriver.findElement(By.cssSelector("#J-loginMethod-tabs > li:nth-child(2)")).click();                Thread.sleep(2000);              //输入用户名和密码                for (char chars : "username").toCharArray()) {                    Thread.sleep(RandomUtil.randomInt(300, 500));                    chromeDriver.findElement(By.xpath("//*[@id=\"J-input-user\"]")).sendKeys(String.valueOf(chars));                }                Thread.sleep(RandomUtil.randomInt(500, 800));                for (char chars : "password".toCharArray()) {                    Thread.sleep(RandomUtil.randomInt(300, 500));                    chromeDriver.findElement(By.xpath("//*[@id=\"password_rsainput\"]")).sendKeys(String.valueOf(chars));                }                Thread.sleep(RandomUtil.randomInt(500, 1000));                chromeDriver.findElement(By.xpath("//*[@id=\"J-login-btn\"]")).click();                Thread.sleep(5 * 1000)                while (true) {                        Thread.sleep(3*60 * 1000);                  //调整账单页面                        chromeDriver.get(";);                        chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);                        //切换为最近7天                        try {                            chromeDriver.findElementByXPath("//*[@id=\"root\"]/div/div/div/div[2]/div/div/form/div[1]/div[2]/div[2]/div/span/div/div[2]/div[3]").click();                        }catch (org.openqa.selenium.NoSuchElementException noSuchElementException){                            continue;                        }                        Thread.sleep(3000);                        try {                            WebElement elementByXPath = chromeDriver.findElementByXPath("//*[@id=\"root\"]/div/div/div/div[4]/div[1]/div/div/div/div/div[1]/div/div/div[1]/div/span");                        } catch (org.openqa.selenium.NoSuchElementException noSuchElementException) {                            continue;                        }                        chromeDriver.findElementByXPath("//*[@id=\"root\"]/div/div/div/div[4]/div[2]/div[1]/div[1]/div[2]/div/div/div/div[1]/div[2]").click();                    }                    Thread.sleep(RandomUtil.randomInt(2000, 3000));                    WebElement tbody = chromeDriver.findElementByXPath("//*[@id=\"root\"]/div/div/div/div[4]/div[2]/div[2]/div/div/div/div/div/div[1]/div/table/tbody");                    List<WebElement> tr = tbody.findElements(By.tagName("tr"));                    Stream<ConcurrentHashMap> concurrentHashMapStream = tr.stream().map(webElement -> {                        List<WebElement> elements = webElement.findElements(By.tagName("td"));                        //入账时间                        String entryTime = elements.get(0).findElement(By.tagName("span")).findElement(By.tagName("span")).getText();                        //支付宝交易单号                        String serialNumber = elements.get(1).findElement(By.tagName("span")).findElement(By.tagName("span")).findElement(By.tagName("span")).getAttribute("title");                        //商家订单号                        String orderNumber = new String();                        try {                            orderNumber = elements.get(2).findElement(By.tagName("span")).findElement(By.tagName("span")).findElement(By.tagName("span")).getAttribute("title");                        } catch (org.openqa.selenium.NoSuchElementException noSuchElementException) {                        }                        //对方信息                        String otherInfo = elements.get(3).findElement(By.tagName("div")).getText();                        //财务类型                        String financialType = elements.get(4).findElement(By.tagName("span")).findElement(By.tagName("span")).getText();                        //收支金额                        String amount = elements.get(5).findElement(By.tagName("span")).findElement(By.tagName("span")).getText();                        //账户余额                        String balance = elements.get(6).findElement(By.tagName("span")).findElement(By.tagName("span")).getText();                        //备注                        //  String remark = elements.get(7).findElement(By.tagName("span")).findElement(By.tagName("span")).getText();                        ConcurrentHashMap concurrentHashMap = new ConcurrentHashMap();                        concurrentHashMap.put("entryTime", entryTime);                        concurrentHashMap.put("serialNumber", serialNumber);                        concurrentHashMap.put("orderNumber", orderNumber);                        concurrentHashMap.put("otherInfo", otherInfo);                        concurrentHashMap.put("financialType", financialType);                        concurrentHashMap.put("amount", amount);                        concurrentHashMap.put("balance", balance);                        // concurrentHashMap.put("remark", remark);                        return concurrentHashMap;                    });                  //列表数据获取完成,至于是否跳转下页,是否发生回调函数根据需求实现            } catch (Exception e) {                log.error("爬虫------------------------------------------------", e);                chromeDriver.quit();            }        });

运行后selenium会通过chrome驱动来自动操作chrome浏览器,完成登录操作和页面跳转,最终采集到需要的信息,其中很多操作都需要休眠是因为平台能够检测到是否是真实用户,所以要进行模拟用户行为,这样才能安全使用。

标签: #测试工具selenium