selenium学习初体验-C#/java/Python

背景:之前由于自己有编写CefSharp.WinForms 窗体版以及 接口化 WCF+CefSharp.WinForms的网站版本,但是由于某些原因,延伸出Selenium学习与研究

总结:selenium特点是在做自动化测试,如果公司需要自动化测试是个不错的选择,开发语言包含很多。你完全可以使用自己熟悉的语言进行开发,请查看 https://docs.seleniumhq.org/docs/ 通过几天的摸索,个人比较还是建议大家最后部署在windows平台,linux平台由于缺少可视化,在调试的时候会有很多坑。

1.C#调用selenium

  请参照 http://www.mamicode.com/info-detail-2746933.html

  1、我们新建一个C#控制台程序

  2、使用Nuget搜索以下依赖库

  需要引用的核心库是Selenium.RC,Selenium.Support,Selenium.WebDriver

   MvcWeb版也可以运行,挂在IIS可以很好运行

using OpenQA.Selenium;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;

namespace Maxiot.ResourceServer.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Test/

        public ActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="accesstoken"></param>
        /// <param name="value">非空参数必须传入数据</param>
        /// <returns></returns>
        public JsonResult GetData()
        {
            try
            {
                using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver())
                {
                    driver.Navigate().GoToUrl("www.baidu.com");
                    var timeouts = driver.Manage().Timeouts();
                    Thread.Sleep(3000);
                    var source = "aaa" + driver.PageSource;
                    return Json(source, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {

                return Json(ex.Message, JsonRequestBehavior.AllowGet);
            }
        }
    }
}

2.Java调用selenium

使用Maven导入包

<!-- selenium-java --><dependency>    <groupId>org.seleniumhq.selenium</groupId>    <artifactId>selenium-java</artifactId>  <!--  <version>3.4.0</version>--></dependency>

package com.example.demoselenium.controller;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.awt.event.KeyEvent;
import java.rmi.ServerException;
import java.security.Key;
import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/api/common/")
public class CommonController {

    @RequestMapping(value = "selenium/OpenChrome", consumes = "application/json", method = RequestMethod.GET)
    public String getOpenChrome() throws ServerException {
        String restResult = "aaaa";
        try {
            //设置属性,通过https://sites.google.com/a/chromium.org/chromedriver/下载对应驱动,如果是linux部署需要下载linux对应驱动
            //System.setProperty("webdriver.chrome.driver", "chromedriver");    //linux设置,
            //System.setProperty("webdriver.chrome.driver", "D:\\Program Files (x86)\\chromedriver_win32\\chromedriver.exe");
            ChromeOptions a = new ChromeOptions();
            a.addArguments("--no-sandbox");
            a.addArguments("--disable-dev-shm-usage");
            //a.addArguments("window-size=1920x3000"); //指定浏览器分辨率
            a.addArguments("--disable-gpu"); //谷歌文档提到需要加上这个属性来规避bug
            //a.addArguments("--hide-scrollbars"); //隐藏滚动条, 应对一些特殊页面
            //a.addArguments("blink-settings=imagesEnabled=false"); //不加载图片, 提升速度
            a.addArguments("--headless"); //浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
            WebDriver driver = new ChromeDriver(a);
            driver.get("http://dpmysql1:802/#/login");
            //如果网页加载不出来的话,get需要加载的时候会至少5秒
            String title = driver.getTitle();
            restResult += "title:" + title;
            //加载不成功,title的就是Ip,可以通过延时时间+title判断是否加载成功
            String dataSoruce = driver.getPageSource();
            restResult += "dataSource:" + dataSoruce;
            Thread.sleep(5000); //等待跳转加载
            WebElement account = driver.findElement(By.id("account"));
            if (account != null) {
                account.sendKeys("datamanager");//输入账号
                String strAccount = account.getAttribute("value");
                restResult += "account:" + strAccount;
            }
            WebElement password = driver.findElement(By.id("password"));
            if (password != null) {
                password.sendKeys("123");//输入账号
                String strPassword = password.getAttribute("value");
                restResult += "password:" + strPassword;
            }
            WebElement btn = driver.findElement(By.xpath("//*[@id=‘app‘]/form/div/div[6]/div/button"));
            if (btn != null) {
                btn.click(); //登录
                restResult += "btn:点击登入系统";
            }

            Thread.sleep(10000); //等待跳转加载
            dataSoruce = driver.getPageSource();
            String url = driver.getCurrentUrl(); //获取登录后的新窗口的url
            if (url.equals("http://dpmysql1:802/#/newhome")) {

                //登录成功
                //driver.findElement(By.xpath("//*[@id=‘app‘]/div/section/section/div[3]/div[1]/span")).click(); //点击按钮
                //driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/section/div[3]/div[2]/ul[1]/li[2]/a")).click(); //点击按钮
                //driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/section/div[1]/div/div/div[2]/div/div[2]/div/div[1]/div/div[4]/div[2]/table/tbody/tr[6]/td[10]/div/i[1]")).click(); //点击按钮
                restResult += "成功";

            } else {
                //失败
                //String message = driver.findElement(By.xpath("//*[@id=\"app\"]/form/div/div[5]/div[2]/p")).getText();
                //System.out.println("*******" + message);
                restResult += "失败" + url + "--" + dataSoruce + "失败";
            }
            //加载不成功,title的就是Ip,可以通过延时时间+title判断是否加载成功
            System.out.printf(title);
            System.out.println("*******");
            driver.close();

            return restResult;
        } catch (Exception e) {

            return restResult + "错误" + e.getMessage();
        }

    }

    /**
     *
     * @param driver 浏览器驱动
     * @param xpath xpath定位表达式
     */
    public static void javaScriptClick(WebDriver driver, String xpath) {
        WebElement element = driver.findElement(By.xpath(xpath));
        try{
            if(element.isEnabled() && element.isDisplayed()){
                System.out.println("使用JS进行也面元素单击");
                //执行JS语句arguments[0].click();
                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            }else {
                System.out.println("页面上元素无法进行单击操作");
            }
        }catch (StaleElementReferenceException e){
            System.out.println("页面元素没有附加在页面中" + Arrays.toString(e.getStackTrace()));
        }catch (NoSuchElementException e){
            System.out.println("在页面中没有找到要操作的元素" + Arrays.toString(e.getStackTrace()));
        }catch (Exception e){
            System.out.println("无法完成单击操作" + Arrays.toString(e.getStackTrace()));
        }
    }

}

Linux运行selenium

1.需要在Linux上面安装Chrome 参考 https://www.cnblogs.com/z-x-y/p/9506941.html

1、安装chrome

用下面的命令安装最新的 Google Chrome

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm也可以下载到本地再安装
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
yum install ./google-chrome-stable_current_x86_64.rpm
安装必要的库
yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

2、安装 chromedriver

chrome官网 wget https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip淘宝源(推荐)wget http://npm.taobao.org/mirrors/chromedriver/2.41/chromedriver_linux64.zip

  将下载的文件解压,放在如下位置

  unzip chromedriver_linux64.zip

/usr/bin/chromedriver

  给予执行权限

chmod +x /usr/bin/chromedriver

目前Java编写的测试脚本在linux上面运行还是有些问题,比如登录按钮事件在windows上面可以触发,Linux失败,暂时我打算在去研究下Python

java代码下载:https://pan.baidu.com/s/1lnJXK__A8ZcIl3oVJyFC9w

Python 编写 selenuim

安装相应的环境:  可到官网下载最新版本 Python

       工具:    我选择Pycharm

配置环境path环境变量,为了方便命令执行,请配置

     

cmd查看python版本,如果命令无效,就可能是安装或环境变量未配置成功

  安装selenium

  

  查看安装的selenium

如果实在cmd配置不好就使用cmd命令行 cd 进入python安装目录下的script文件夹下,使用pip install selenium

  

我的PyCharm不能识别pip install selenium 安装的 selenium 我选择在PyCharm进行安装

代码阶段

import selenium.webdriver
from time import  sleep

#实例化对象
driver=selenium.webdriver.Chrome()
try:
    #设置链接
    driver.get("http://10.60.136.145:802/#/login")
    sleep(3)    #间隔3秒钟
    title = driver.title    #获取网页标题
    dataSoruce = driver.page_source #获取网页资源
    account = driver.find_element_by_id("account")  #获取账号
    if not account is None:
        account.send_keys("datamanager")    #设置账号

    password = driver.find_element_by_id("password")
    if not password is None:
        password.send_keys("123")

    btn=driver.find_element_by_xpath("//*[@id=‘app‘]/form/div/div[6]/div/button")
    if not btn is None:
        btn.click()
except:
    print("出错")
finally:
    driver.close()

代码执行后会自动运行谷歌浏览器,并打开设置的网址,然后进行账号和密码登录

原文地址:https://www.cnblogs.com/shexunyu/p/11398944.html

时间: 2024-08-26 12:13:34

selenium学习初体验-C#/java/Python的相关文章

Spring学习初体验

一.首先我们要明确我们为什么要学?在我们学习了javaweb基础后,我们基本可以完成基本的网站要求,但是我们为什么要学习和使用使用Spring? 1.降低组件之间的耦合度,实现软件各层之间的解耦. controller----->service--------->dao 2.可以使用容器几桶的众多服务.如:事务管理服务.消息服务.当我们使用容器管理时,开发人员就不再需要手工控制事务,也不需处理复杂的事务传播. 3.容器提供单例模式支持,开发人员不再需要自己编写实现代码. 4.容器提供了AOP技

研一前的暑假,深度学习初体验

????在五月二十七号左右,再次来到一所新的城市,即将在这里度过我研究生的三年,之所以来这么早,是因为希望研究生阶段,能够跟着一个研究方向,自己比较感兴趣的导师.找的第一个导师比较偏学术一些,而我又希望自己在研究生阶段能够有一定的项目经历,所以在经过思考后,我和老师表明了我的想法,老师也表示理解,和我推荐了其他的导师.在找导师的过程中,发现比较热门的导师的特点有以下几点.在校刚来的几位导师中,比较年轻的导师无论能力还是学术都比较强,所有也很快就定下了人选.在来之前,自己也大致确立了方向,大数据.

暑假第一篇,linux学习初体验

在大二结束的小学期我学习了嵌入式编程andrino.智能小车和树莓派.树莓派用的就是类Unix语言,当时主要是学习了: ·简单的命令行命令和使用gcc编译c文件的各种带参数的方式. ·进程.线程.网络编程.FIFO管道的使用,并未深入了解原理. 学嵌入式主要是接线,加把c程序烧录到芯片中,通过逻辑来控制各口的电平,来显示操作的情况,或者是在PC端的串口中显示(有实验报告). 智能小车功能包括各种运动(前后左右停止),有温度.光照.距离的测试模块,有自动距离检测.如果小于一定数值会改变方向.还有红

python初体验--我对python的体会

接触了python已经两周了,从一个程序小白发展到了对python有了一些简单的认识,虽然以前学过一些c语言,但是能感觉出来python与c之间的差别很大,python的计算能力比c要高得多,而且各种包使python使用起来非常方便,这可以让我们再平时可以利用python制作一些小的程序来计算一些问题,使学这门语言有了更多实用性.而且上课老师为我们展示python通过arduino制作温度计算和bim指数,并且通过数据绘画出图形化界面,利用其中的函数把数据做成图表使我更加感兴趣,感觉这些实验很有

JSP学习初体验

JSP简介: 1)JSP--Java Server Pages 2)拥有servlet的特性与优点(本身就是一个servlet) 3)直接在HEML中内嵌JSP代码 4)JSP程序由JSP Engine先将它转换成servlet代码,接着将它编译成类文件载入执行 5)只有当客户端第一次请求执行JSP时,才需要将其转换.编译 JSP的优点: 1)优良的性能 优于CGI.PHP.ASP 2)平台无关性 操作系统无关,web服务器无关 3)可扩展性 tag的扩展机制,简化页面开发 JSP编程--基本语

iOS学习初体验

来到无限互联已经一个星期了,当初选择来无限互联学习ios开发,心里确实有点忐忑,但是渐渐觉得很踏实.每天早八点到晚九点的学习好像又回到了高中,来到这的第一天早上醒来,突然觉得自己呼吸的是大京都的空气,于是预期的想家了.正式上课后,这种感觉就慢慢减少了,不是不想家了,而是紧张的学习根本没有闲的发呆或者继续放大想家情绪的的时间.    入学第一天人事部的老师和教学总监汪洪俊老师在发言中都给予了我们很大的期许和信心.当然,也第一次见到了班主任张琪老师.开学典礼的最后,我们一合了影,那一刻突然就觉得,我

json学习初体验--第三者jar包实现bean、List、map创json格式

1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, commons-lang.jar commons-beanutils .jar commons-collections.jar commons-logging.jar ezmorph.jar 2.创建javabean文件,以以下的为例: <span style="font-size:18px;&

JMeter 初体验/Java 网络请求脚本添加

Jmeter  简易使用(网上有很多图片,教程,此处 只是简单 描述一下): Jmeter   软件使用,首先 创建一个  测试计划,在该 测试计划上右键  添加- ->Threads(Users) -->  线程组 然后在 线程组上 右键--> 添加-->Sampler-->Http 请求 . 在 Http 请求中配置 响应的信息,保存即可 然后需要创建响应的  结果树,创建步骤:(在 该 线程组上 右键,添加 -->监听器-->查看结果树 ) 可根据个人需求,

Spring MVC + Security 4 初体验(Java配置版)

这篇文章同样是使用的Java配置,而非XML配置,如果你对于Java配置的Spring MVC开发还不太熟悉,可以先看我这篇文章. 转自:http://xueliang.org/article/detail/20170302232815082 Authority 创建一个 Authority ,实现自 org.springframework.security.core.GrantedAuthority 类,getAuthority 方法只返回一个表示权限名称的字符串,如 AUTH_USER .