zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [转]oracle数据库定时任务dbms_job的用法详解
    身份证号码的正则表达式及验证详解(JavaScript,Regex)
    js数组操作
    jq滚动到底部加载更多方法
    jq之实现轮播
    node之npm一直出错
    Jq之21点游戏
    移动端屏幕适配viewport
    meta属性
    用户体验之表单结构
  • 原文地址:https://www.cnblogs.com/xachary/p/4150970.html
Copyright © 2011-2022 走看看