前面我们知道了如何进行对象的定位,下面我们进一步来了解selenium的一些功能特性:

1>等待:我们在处理对象的时候,对象并不能及时的“出现”,那么此时我们就需要进行等待了。

 driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20)); //这里的20,是以"s" 为单位,这里的数值可以根据实际情况来设置,

  

还有一种等待方式:使用WebDriverWait对象,同样强大。

public IWebElement WaitForElement(IWebDriver driver, string el_id,int timeout)   //找到元素就返回
        {IWebElement ele = null;try{WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));ele = wait.Until<IWebElement>((d) =>{return d.FindElement(By.Id(el_id));});               }catch{Console.WriteLine("12e");}return ele;}

 

2>获取窗体句柄:

driver.CurrentWindowHandle

3>窗体转换:

driver.SwitchTo().Window();

4>使用Actions

var xx = driver.FindElement(By.Id("id"));
Actions builder = new Actions(driver);
builder.MoveToElement(xx).Perform();

5>根据链接文本定位对象(不太适用本地化测试)

driver.FindElement(By.PartialLinkText("登录"));

6>处理弹出框

driver.SwitchTo().Alert().Accept()//简单讲就是点击yes
driver.SwitchTo().Alert().Dismiss()//点击No

7>判断页面字符串

driver.PageSource.Contains("any word;");

下面来看具体的实例:

登陆百度首页->搜索“博客园”->登陆博客园->退出->处理弹出框

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
//添加selenium的引用
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;using OpenQA.Selenium.Interactions;
//添加引用-在程序集中添加System.Drawing
using System.Drawing;
using System.Drawing.Imaging;namespace Selenium
{class Program{static void Main(string[] args){//此时记得添加路径    using (var driver = new InternetExplorerDriver(@"D:\Selenium\IEDriverServer_x64_2.34.0\")){//进入百度首页driver.Navigate().GoToUrl(@"http://www.baidu.com");Thread.Sleep(1000);             //是否包含"百度"这个字符串,可以用来判断页面是否出现             if (driver.PageSource.Contains("百度")){ Console.WriteLine(" 123");

}
//设置窗体最大化
                driver.Manage().Window.Maximize();Thread.Sleep(1000);//找到对象     var colSearchBox = driver.FindElementsByName("wd");var btnClick = driver.FindElement(By.Id("su1"));//发送搜索内容colSearchBox[1].SendKeys("bokeyuan");//Thread.Sleep(1000);//等待搜索结果WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));IWebElement searchResutl = null;try{searchResutl = wait.Until<IWebElement>((d) =>{return d.FindElement(By.ClassName("bdsug"));});}catch(Exception e){Console.WriteLine("Timeout to find element:" + " "+ e.Message.ToString());}//搜索结果数量var searchResult_Children = searchResutl.FindElements(By.TagName("li"));foreach (IWebElement child in searchResult_Children){if (child.Text.Equals("博客园")){    //选择正确的搜索对象
                        child.Click();break;}}//设置页面加载时间driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//获取当前页面句柄 ,适用于一个窗体//var cc = driver.CurrentWindowHandle;//进入首页var homePage = driver.FindElement(By.ClassName("result"));var homePage_child = homePage.FindElement(By.Id("1"));homePage_child.FindElement(By.ClassName("favurl")).Click();//设置页面加载时间driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//获取当前网页的句柄,使用与多个窗体//那么我们需要的是第二个窗体var currentWindowHandle = driver.WindowHandles[1];//因为要现在要处理的对象在新窗体上,所以这里要进行窗体转换
                driver.SwitchTo().Window(currentWindowHandle);//下面将鼠标移动到左边的".Net技术",此时会滑出相应的模块//用XPath定位对象,此处找到"新手区"//移动鼠标var xx = driver.FindElement(By.Id("cate_item_108698"));Actions builder = new Actions(driver);builder.MoveToElement(xx).Perform();Thread.Sleep(2000);//使用XPath 找对象//driver.FindElement(By.Id("cate_sub_block")).FindElement(By.XPath("//div[1]/div[2]/ul[1]/li[1]/a[@href='/cate/beginner/']")).Click();//div[1]第一个div//上面的比较"笨重",下面的简单多了driver.FindElement(By.Id("cate_sub_block")).FindElement(By.XPath("//a[@href='/cate/beginner/']")).Click();//登陆//使用PartialLinkText定位对象var btnLogin1 = driver.FindElement(By.PartialLinkText("登录"));btnLogin1.Click();var txtUserName = driver.FindElement(By.Id("tbUserName"));txtUserName.SendKeys("Alvin-x");var txtPassword = driver.FindElement(By.Id("tbPassword"));txtPassword.SendKeys("123456");var btnLogin2 = driver.FindElement(By.Id("btnLogin"));btnLogin2.Click();Thread.Sleep(2000);//使用CssSelector定位对象//点击“退出”var btnBackup = driver.FindElement(By.CssSelector("a[href='#']"));btnBackup.Click();//等待弹出框弹出后再处理它 Thread.Sleep(1000);IAlert result = null;while (1 < 2){try{result = driver.SwitchTo().Alert();}catch (Exception){result = null;}if (result != null){result.Accept();break;}}//退出
                driver.Quit();}}}
}

  

转载于:https://www.cnblogs.com/Alvin-x/p/3559951.html

自动化测试:Selenium webdriver 学习笔记-C#版(四)相关推荐

  1. 自动化测试selenium+java学习笔记

    //driver后面接 get(String url)                     访问指定url页面  getCurrentUrl()                   获取当前页面的 ...

  2. 【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化

    第四章 欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. #编译器使用的是sypder,其中&q ...

  3. Python3+Selenium3+webdriver学习笔记8(单选、复选框、弹窗处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记8(单选.复选框.弹窗处理)''' from selenium ...

  4. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  5. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

  6. VULKAN学习笔记-inter教学四篇

    VULKAN学习笔记-inter教学四篇 --交换链相关函数:实例层 vkCreateWin32SurfaceKHR vkDestroySurfaceKHR vkGetPhysicalDeviceSu ...

  7. 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法

    机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...

  8. AI学习笔记--人机对话的四种形态

    AI学习笔记--人机对话的四种形态 ><div class="show-content-free"><p>最近在筹备转行 AI PM 由于之前的产品线 ...

  9. OpenCV学习笔记(十四):重映射:remap( )

    OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...

最新文章

  1. C语言中字符数组和字符串指针分析
  2. SDN/NFV步入规模部署期 运营商拓智能化成大势所趋
  3. vs 输入代码时出现火花_在Visual Basic的立即窗口内输入以下语句 X=65
  4. JAVA 对象引用,以及对象赋值
  5. [MYSQL] 如何彻底卸载MYSQL5.x
  6. android6.0源码分析之Camera API2.0下的初始化流程分析
  7. vue 中 computed 计算属性 的用法
  8. 陕西师《c语言程序设计》作业,陕西c语言编程学习入门
  9. ERPSYSTEM开发教程01 框架介绍
  10. MFC加入mysql后编译成功,在自己电脑上成功运行,当打包发送到其他电脑上报错, 缺少libcrypto-1_1-x64.dll以及缺少libssl-1_1-x64.dll问题解决方案,完美亲测
  11. 杰控连接mysql_杰控FameView组态软件在数据库连接和查询方面的应用
  12. 国产银河麒麟 安装wps 的简单方法
  13. Markdown使用手册
  14. 最好用的七大顶级 API 接口测试工具
  15. System进程的启动流程第一部分
  16. shopex mysql 数据库服务器_shopex数据库优化实例
  17. 网络统考计算机操作题分数占比,计算机一级office考试 word占多少分值?
  18. 高级程序员必会的程序设计原则 —— 墨菲定律及防呆设计
  19. 澎湃微PT32F003/F005
  20. 服务器系统盘划分,服务器硬盘分区的划分c区系统区.doc

热门文章

  1. 1.7 matlab矩阵元素的引用(可通过下标和序号引用)
  2. Simulink仿真 第八节 积分模块
  3. cot和acot--余切和反余切函数
  4. 整数划分问题(续)(非递归法)
  5. 在二叉树中找值为x的结点(假设所有结点的值都不一样)
  6. 域 无法管理计算机,计算机无法加入域的终级解决方法
  7. 【前端学习日记】用reveal.js实现制作网页幻灯片
  8. c# 说说开发通用通信库,尤其是分布式服务的通信
  9. 修改anaconda3 jupyter notebook 默认路径
  10. 解决远程连接mysql错误1130