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();
View Code

 

例子片段:

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();
            }
        }
    }
}
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。