Selenium驱动IE自动化
1.环境准备
1.1开发工具
Visual Studio 2017
1.2 驱动下载地址
IE驱动下载地址:http://selenium-release.storage.googleapis.com/index.html
找到对应电脑的版本下载,比如我本机是Windows 操作系统、使用WebDriver是 v3.14.0,那下载地址就是http://selenium-release.storage.googleapis.com/3.14/IEDriverServer_Win32_3.14.0.zip
1.3 环境设置
>>实例代码使用IE11
>>IE浏览器设置 缩放比例100%
>>IE浏览器Internet选项 【安全】选项中 取消勾选 启用保护模式
详细设置可参考:https://blog.csdn.net/bo_mask/article/details/75041400
2.库安装
需要使用库的项目,右键->管理Nuget程序包
3.创建驱动对象
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using System;
using System.Diagnostics;
using System.Linq;/*
*┌────────────────────────────────────────────────┐
*│ 描 述:IE驱动类
*│ 作 者:1326702940@qq.com
*│ 版 本:1.0
*│ 创建时间:2021-8-24
*└────────────────────────────────────────────────┘
*/
namespace IEDriver
{/// <summary>/// 使用前设置/// 1.实例代码使用IE11/// 2.IE浏览器设置 缩放比例100%/// 3.IE浏览器Internet选项 【安全】选项中 取消勾选 启用保护模式/// https://blog.csdn.net/bo_mask/article/details/75041400///驱动下载地址: http://selenium-release.storage.googleapis.com/index.html/// </summary>public class IEDriver{/// <summary>/// 获取IE驱动对象/// </summary>/// <param name="WebDriverPath">IEDriverServer.exe 的存放路径</param>/// <returns></returns>public IWebDriver GetIEDriver(string WebDriverPath = "", InternetExplorerOptions options = null){if (string.IsNullOrWhiteSpace(WebDriverPath)){WebDriverPath = ".";} if (options == null){options = new InternetExplorerOptions(){IgnoreZoomLevel = true,IntroduceInstabilityByIgnoringProtectedModeSettings = true,// 解决Win7 IE11登录问题"OpenQA.Selenium.IE.InternetExplorerDriverCurrently focused window has been closed"// 需要定义初始化网页InitialBrowserUrl = "www.baidu.com",//解决Win7 IE11输入慢的问题RequireWindowFocus = true};}var service = InternetExplorerDriverService.CreateDefaultService(WebDriverPath);service.HideCommandPromptWindow = true;var driver = new InternetExplorerDriver(service, options);if (driver != null){driver.Manage().Window.Maximize();driver.Manage().Timeouts().PageLoad = TimeSpan.FromMilliseconds(60000);driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(1500);driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromMilliseconds(60000);}return driver;}/// <summary>/// 关闭驱动/// </summary>public void CloseIEDriver(){Process[] pros = Process.GetProcessesByName("IEDriverServer");if (pros.Length > 5){var prosOrder = pros.OrderBy(item => { return item.StartTime; }).ToArray();for (int i = 5; i < prosOrder.Length; i++){prosOrder[i].Kill();}}}}
}
4.驱动页面元素
using Common;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.Events;
using OpenQA.Selenium.Support.UI;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;/*
*┌────────────────────────────────────────────────┐
*│ 描 述:IE驱动示例Demo
*│ 作 者:1326702940@qq.com
*│ 版 本:1.0
*│ 创建时间:2021-8-25
*└────────────────────────────────────────────────┘
*/
namespace IEDriver
{/// <summary>/// 应用demo/// </summary>public class IEDriverDemo{IEDriver iEDriver = new IEDriver();/// <summary>/// 测试Demo/// </summary>public void LoginTest(){// 驱动对象IWebDriver idriver = iEDriver.GetIEDriver();// 页面事件监听EventFiringWebDriver driver = new EventFiringWebDriver(idriver);// 执行js对象IJavaScriptExecutor jsExec = (IJavaScriptExecutor)driver;// 点击监听driver.ElementClicked += Driver_ElementClicked;// 导航监听driver.NavigatedForward += Driver_NavigatedForward;// 弹个窗jsExec?.ExecuteScript("alert('我是警告框');");// 点击 警告框的 确定 按钮driver.SwitchTo()?.Alert()?.Accept();// 导航到测试网址driver.Navigate().GoToUrl("https://yxyh.aicenyi.com/");#region 如果元素位于iframe里try{IWebElement iframe = WaitUntilElement(driver, By.XPath("//*[@id=\"loginIframe\"]"));// 进入到iframedriver.SwitchTo().Frame(iframe);// 一顿操作猛如虎// 释放iframe,重新回到主页面上driver.SwitchTo().DefaultContent();}catch (Exception ex){;}#endregion// 输入用户名WaitUntilElement(driver, By.Id("userName"))?.SendKeys("admin");Thread.Sleep(1000);// 输入密码WaitUntilElement(driver, By.Id("password"))?.SendKeys("123456");// 截图前这个操作并非必须,只是为了展示更多知识点// 移动鼠标到验证码元素上Actions action = new Actions(driver);var imageObjElement = WaitUntilElement(driver, By.Id("imgObj"));action?.MoveToElement(imageObjElement);// 获取验证码坐标var point = Point.Empty;point.X = (imageObjElement?.Location.X).Value;point.Y = (imageObjElement?.Location.Y).Value;// 获取验证码宽高var size = Size.Empty;size.Width = (imageObjElement?.Size.Width).Value;size.Height = (imageObjElement?.Size.Height).Value;// 根据屏幕缩放计算真实值 如果屏幕无缩放,不需要这样处理int offsetX = GetScreenOfZoom((decimal)point.X);int offsetY = GetScreenOfZoom((decimal)point.Y);int width = GetScreenOfZoom((decimal)size.Width);int height = GetScreenOfZoom((decimal)size.Height);// 验证码截图ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;Screenshot screenshot = screenshotDriver.GetScreenshot();var picBytes = ImageHelper.GetPartOfImageRecFromBytes(screenshot.AsByteArray, width, height, offsetX, offsetY);// 保存为本地图片var picBytes2 = picBytes;MemoryStream ms = new MemoryStream(picBytes2);Image img = Image.FromStream(ms);img.Save("cc.png");img?.Dispose();// 输入验证码// 点击验证码输入框var yzmElement = WaitUntilElement(driver, By.Id("imageCode"));yzmElement?.Click();// 复制到粘贴板// 解决IE输入慢问题,避免中文输入法影响所以采用复制的方式System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>{System.Windows.Clipboard.Clear();System.Windows.Clipboard.SetDataObject("验证码111");})).Wait();// 粘贴Ctrl+V 释放action = new Actions(driver);action.KeyDown(Keys.Control).SendKeys("v").SendKeys(Keys.Null).Perform();// 点击登录var loginElement = WaitUntilElement(driver, By.Id("loginBtn"));loginElement?.Click();// 最终执行个有返回值的jsvar browerVersion = jsExec.ExecuteScript("return window.navigator.userAgent.toLowerCase();");Console.WriteLine("当前浏览器版本为:" + browerVersion);iEDriver.CloseIEDriver();}/// <summary>/// 点击监听/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public void Driver_ElementClicked(object sender, WebElementEventArgs e){Console.WriteLine("Driver_ElementClicked");}/// <summary>/// 导航监听/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public void Driver_NavigatedForward(object sender, WebDriverNavigationEventArgs e){Console.WriteLine("Driver_NavigatedForward");}/// <summary>/// 等待/// </summary>/// <param name="driver">驱动</param>/// <param name="by">选择器</param>/// <param name="timeWait">等待事件 毫秒</param>/// <returns></returns>public IWebElement WaitUntilElement(IWebDriver driver, By by, int timeWait = 1000){WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMilliseconds(timeWait));return wait.Until(dri => dri.FindElement(by));}/// <summary>/// 拖动元素 针对元素/// </summary>/// <param name="driver">驱动</param>/// <param name="element">要拖动的元素</param>/// <param name="offsetX">X轴方向的距离</param>/// <param name="offsetY">Y轴方向的距离</param>public void HoldAndMove(IWebDriver driver, IWebElement element, int offsetX, int offsetY){Actions action = new Actions(driver);action?.ClickAndHold(element).Perform();action?.MoveByOffset(offsetX, offsetY).Perform();if (!driver.ToString().Equals("OpenQA.Selenium.IE.InternetExplorerDriver")){// 非IE 取消 点击action?.Click()?.Perform();}// 释放action?.Release()?.Perform();}/// <summary>/// 根据缩放计算相对于屏幕的实际尺寸/// </summary>/// <param name="value">原始值</param>/// <returns></returns>public int GetScreenOfZoom(decimal value){return Convert.ToInt32(Math.Round((decimal)ScreenUtils.ScaleDpiX * value, 0, MidpointRounding.AwayFromZero));}}
}
Selenium驱动IE自动化相关推荐
- pythonselenium教程模拟鼠标和键盘_【02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!...
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...
- Selenium+Python+Pycharm自动化环境搭建具体步骤
一.python下载:建议选择3.4以上的版本 官网下载地址: Download Python | Python.org 下载后自行进行安装,安装python需要配置环境变量,安装时可勾选" ...
- 浅谈Selenium之WebUI自动化
一.自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较.在此过 ...
- Python + Selenium + Chrome Driver 自动化点击+评论+刷弹幕(仅供学习)
Python + Selenium + Chrome Driver 自动化点击 评论 刷弹幕 首先说明,这篇博文仅供学习!仅供学习!仅供学习! 不要拿去做其他事,封号概不负责!!! 突发奇想 首先先说 ...
- 基于python+selenium,实现自动化沙袋校园出入备案
基于python+selenium,实现自动化出入校园报备 背景-饿肚子的胡思乱想 selenium的安装 程序实现和问题解决 没有解决的问题和改进方向 源代码 背景-饿肚子的胡思乱想 昨天考完试,我 ...
- 使用Selenium WebDriver测试自动化的22条实用技巧
使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试. Webdriver是Selenium框架的核心组件,通过它您可以针对不同类型的浏览器(例如Google Chro ...
- 自动化比手工测试成本高?使用Selenium评估测试自动化的ROI指标
跨浏览器测试是一种测试,需要大量的精力和时间.通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动. 特别是如果手动处理,使用Seleni ...
- [转载] 使用selenium_一日一技:使用Selenium的浏览器自动化
参考链接: 使用Selenium的浏览器自动化 Selenium是用于通过程序控制Web浏览器的强大工具. 它适用于所有浏览器,可在所有主要操作系统上运行,并且其脚本以各种语言(即Python,Jav ...
- 自动更新Selenium驱动chromedriver
由于谷歌游览器经常自动更新导致selenium驱动失效需要重新下载,如何让代码自动更新selenium驱动的方法呢? selenium连接谷歌游览器抛出异常时,会展示当前谷歌游览器的版本信息,我们可以 ...
最新文章
- 对面向对象基本原则的总结
- cell 滑动实现旋转动画效果
- 三维曲面matlab程序,用matlab画三维曲面图 - 程序语言 - 小木虫 - 学术 科研 互动社区...
- Python之路(第二十一篇) re模块
- python PyQt5如何绘制矩形框?(画框/绘框)
- Java并发编程系列之CyclicBarrier详解
- 39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
- ebs java并发_EBS中Java并发程序笔记(1)
- vue项目中axios的封装
- 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球
- tomcat java_opts 最大_tomcat性能优化(JAVA_OPTS)
- oh my zsh使用频率前 20 的命令
- SQL中的Having与Where的区别(面试常问)
- miRbase 数据库简介
- PHOTOSHOP中常用的四种抠图方法
- laravel 发送邮件
- The NPF driver isn't running. You may have trouble capturing or listing interfaces
- 从大学毕业的迷茫,到现在拿到高薪,感谢爱创课堂的老师
- 用python来实现输出 1-1000的素数,并且按照每8个一行输出
- java ee 怎么改名_Java EE 改名 Jakarta EE 后 又要换 Logo 了