Selenium WebDriver 学习笔记

1. 打开VS2012

2. 新建工程(单元测试工程或控制台程序都可以, 看需求)

3. 工具->NuGet程序包管理器->程序包管理器控制台

4. 输入"Install-Package Selenium.WebDriver"安装程序包

5. 输入"Install-Package Selenium.WebDriverBackedSelenium"安装程序包

6. 输入"Install-Package Selenium.Support"安装程序包

一些方法的意义(主观感觉, 文档有限(并且国内访问不了), 一天左右的时间的接触):

//火狐控制器, 还有别的浏览器, 需要安装对应的Driver, 如ChromeDriver
IWebDriver driver = new FirefoxDriver(); 

//加载页面
driver.Navigate().GoToUrl(baseURL + "/");

//最大化窗口
driver.Manage().Window.Maximize();

//线程等待
System.Threading.Thread.Sleep(1000);

//点击元素
driver.FindElement(By.Id("Login")).Click();

//填写表单
driver.FindElement(By.Id("poploginId")).SendKeys("xachary");

//获取鼠标动作
Actions actions = new Actions(driver);

//把鼠标移动到元素
actions.MoveToElement(element);

//移动坐标(根据上一次的相对位置)
actions.MoveByOffset(0, 50);

//执行鼠标动作(包含多个动作)
actions.Perform();

//等待元素出现(关键是等待的元素是从不可见到可见, 不然无效, 则用Thread.Sleep吧)
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(10000 * 100));

//用CSS选择查找元素
driver.FindElement(By.CssSelector("li.first > a > img")).Click();

例子片段:

using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Interactions.Internal;
using System.Drawing;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium.Chrome;

namespace BosSeleniumDriver
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver;
            string baseURL;
            driver = new FirefoxDriver();
            //driver = new ChromeDriver();
            //baseURL = "http://localhost:49912";
            baseURL = "http://172.16.8.7:4399";
            try
            {
                //首页
                driver.Navigate().GoToUrl(baseURL + "/");

                //最大化窗口
                driver.Manage().Window.Maximize();

                //线程等待1秒
                System.Threading.Thread.Sleep(1000);

                //登陆
                driver.FindElement(By.Id("Login")).Click();
                driver.FindElement(By.Id("poploginId")).SendKeys("xachary");
                driver.FindElement(By.Id("password")).SendKeys("home890619");
                driver.FindElement(By.Id("loginbtn")).Click();

                //线程等待1秒
                System.Threading.Thread.Sleep(1000);

                Actions actions = new Actions(driver);
                //移动鼠标让导航出现
                IWebElement nav = driver.FindElements(By.CssSelector(".has_sub"))[0];
                actions.MoveToElement(nav);
                actions.MoveByOffset(0, 50);
                actions.Perform();

                //等待导航出现, 100毫秒
                driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(10000 * 100));

                //点击家庭药箱链接
                actions.Click();
                actions.Perform();

                //选择第一个商品
                driver.FindElement(By.CssSelector("li.first > a > img")).Click();

                //跳转到新页面
                driver.SwitchTo().Window(driver.WindowHandles.Last());

                //购买
                driver.FindElement(By.LinkText("立即购买")).Click();

                //等待获取收货地址
                driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 3));

                //如果没有地址
                if (driver.FindElements(By.CssSelector(".address-radio.fl")).Count == 0)
                {
                    //级联下拉框
                    new SelectElement(driver.FindElement(By.Id("sltProvince"))).SelectByText("广东省");

                    driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 3));

                    new SelectElement(driver.FindElement(By.Id("sltCity"))).SelectByText("珠海市");

                    driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 3));

                    new SelectElement(driver.FindElement(By.Id("sltArea"))).SelectByText("香洲区");

                    //填写表单
                    driver.FindElement(By.Id("txtAddress")).Clear();
                    driver.FindElement(By.Id("txtAddress")).SendKeys("测试地址");
                    driver.FindElement(By.Id("txtReceive")).Clear();
                    driver.FindElement(By.Id("txtReceive")).SendKeys("测试收货人");
                    driver.FindElement(By.Id("txtTelephone")).Clear();
                    driver.FindElement(By.Id("txtTelephone")).SendKeys("18507567676");
                    //提交表单
                    driver.FindElement(By.Id("btnUpdateAddr")).Click();
                }
                driver.FindElement(By.Name("rdoAddr")).Click();

                //等待商品信息出现
                WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 3));
                wait.Until<IWebElement>((o) =>
                {
                    return driver.FindElement(By.CssSelector(".cart_list_td tr"));
                });

                //等待提交订单按钮生效
                System.Threading.Thread.Sleep(2000);
                //提交订单
                driver.FindElement(By.LinkText("提交订单")).Click();

                //选择工行支付
                WebDriverWait wait2 = new WebDriverWait(driver, new TimeSpan(0, 0, 5));
                wait2.Until<IWebElement>((o) =>
                {
                    return driver.FindElement(By.Id("gh"));
                }).Click();
                //支付
                driver.FindElement(By.Id("btn_pay")).Click();
                driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 2));
                //关掉支付弹出页
                driver.SwitchTo().Window(driver.WindowHandles.Last());
                driver.Close();
                //回到支付页面
                driver.SwitchTo().Window(driver.WindowHandles.Last());
                driver.FindElement(By.LinkText("付款遇到问题")).Click();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("结束");
                System.Threading.Thread.Sleep(3000);
                //Console.ReadLine();
                driver.Quit();
            }
        }
    }
}

时间: 2024-08-13 21:04:38

Selenium WebDriver 学习笔记的相关文章

selenium webdriver 学习笔记(二)

selenium webdriver 一.定位一组元素: webdriver可以很方便的使用findElement 方法来定位某个物定的对象.不过有时候我们却要定位一组对象,这时候就需要使用findElements方法. 应用场景: 1. 批量操作对象,比如将页面上所有checkbox都选择上: 2.先获取一组对象,再在这组对象中过滤出需要定位的一些对象.比如定位页面上所有checkbox,然后再选择最后一个. 二.多层框架.窗口定位 switch_to_frame() switch_to_wi

selenium webdriver 学习笔记(三)

selenium webdriver 一.上传文件操作 上传文件夹一般要打开一个本地窗口,从窗口选择本地文件添加.所以一般会卡在如何操作本地窗口添加上传文件. 其实,在selenium webdriver没我们 想的那么复杂.只要定位到上传按钮,通过send_keys添加本地文件path就可以了.绝对path和相对path都可以,关键是上传文件存在. 示例: from selenium import webdriver import os,time #脚本要与测试html同一目录 file_pa

selenium webdriver 学习笔记一

selenium webdriver 第一个脚本: #coding = utf-8 from selenium import webdriver import time url = "http://www.baidu.com" browser = webdriver.chrome() browser.get(url) #查找元素 browser.find_element_by_id("kw").send_keys("Python") browse

Selenium webdriver 学习总结-元素定位

Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法. 1.工具选择:在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成selenium IDE

Selenium Webdriver 学习总结-Jenkins配置(八)

这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接 我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节.废话不多说,开始上源码 void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector&

selenium webdriver 学习总结-数据驱动(六)

QQ群:136924235 论坛:http://bbs.shareku.com webdriver可以结合junit中的Parameterized运行器完成数据驱动的目的,数据驱动的方式很多,可以结合csv文件,excel文件,jdbc等,下面我将结合csv,jdbc来展示如何完成数据驱动测试. 一.先给大家介绍一下如何使用Parameterized运行器,两种方式实现. 1.第一种方式,通过构造方法初始化测试数据 代码示例: package junit.parameters; import o

selenium webdriver学习(七)------------如何处理alert、confirm、prompt对话框( 转)

selenium webdriver学习(七)------------如何处理alert.confirm.prompt对话框 博客分类: Selenium-webdriver alertpromptconfirmseleniumwebdriver alert.confirm.prompt这样的js对话框在selenium1.X时代也是难啃的骨头,常常要用autoit来帮助处理. 试用了一下selenium webdriver中处理这些对话框十分方便简洁.以下面html代码为例: Html代码  

selenium webdriver学习(九)------------如何操作cookies(转)

selenium webdriver学习(九)------------如何操作cookies 博客分类: Selenium-webdriver Web 测试中我们经常会接触到Cookies,一个Cookies主要属性有”所在域.name.value.有效日期和路径",下面来讲一下怎么操作Cookies. Java代码   import java.util.Set; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebD

selenium webdriver学习(五)------------iframe的处理(转)

selenium webdriver学习(五)------------iframe的处理 博客分类: Selenium-webdriver 如何定位frame中元素 有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题.这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一.如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的.反之你在一个iframe中查找另一个iframe元