专栏首页changyandouSelenium系列学习(一)

Selenium系列学习(一)

Selenium官方说明文档

  • 英文-https://www.selenium.dev/documentation/en/
  • 中文-https://www.selenium.dev/documentation/zh-cn/getting_started_with_webdriver/

Selenium浏览器自动化项目

Selenium is an umbrella project for a range of tools and libraries that enabled and support the automation of web browsers.

这里说的"umbrella project"是一个比较关键的概念, 就是说,它是一个 ”一揽子“工程,包含了系列内容,不是指某个单独的独立项目。

Selenium的核心是WebDriver,它是编写指令集的接口,该指令集可以在许多浏览器中交互。

  • WebDriver

如果您开始使用桌面网站测试自动化, 那么您将使用 WebDriver APIs. WebDriver 使用浏览器供应商提供的浏览器自动化 API 来控制浏览器和运行测试. 这就像真正的用户正在操作浏览器一样. 由于 WebDriver 不要求使用应用程序代码编译其 API, 因此它本质上不具有侵入性. 因此, 您测试的应用程序与实时推送的应用程序相同.

  • IDE

Selenium IDE (Integrated Development Environment 集成开发环境) 是用来开发 Selenium 测试用例的工具. 这是一个易于使用的 Chrome 和 Firefox 浏览器扩展, 通常是开发测试用例最有效率的方式. 它使用现有的 Selenium 命令记录用户在浏览器中的操作, 参数由元素的上下文确定. 这不仅节省了开发时间, 而且是学习 Selenium 脚本语法的一种很好的方法.

  • Grid

Selenium Grid允许您在不同平台的不同机器上运行测试用例. 可以本地控制测试用例的操作, 当测试用例被触发时, 它们由远端自动执行.

当开发完WebDriver测试之后, 您可能需要在多个浏览器和操作系统的组合上运行测试. 这就是 Grid 的用途所在.

            using (IWebDriver driver = new FirefoxDriver())
            {
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
                driver.Navigate().GoToUrl("https://www.google.com/ncr");
                driver.FindElement(By.Name("q")).SendKeys("cheese" + Keys.Enter);
                IWebElement firstResult = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("h3>div")));
                Console.WriteLine(firstResult.GetAttribute("textContent"));
            }

在示例代码中存在ExpectedConditions.ElementExists,第一次使用的时候,即使安装了WebDriver和WebDriver.Support,依然无法找到ExpectedConditions,搜索后发现,需要使用SeleniumExtras.WaitHelpers,所以完整的内容如下:

当启动运行后会报出如下内容的异常:

OpenQA.Selenium.DriverServiceNotFoundException
  HResult=0x80131500
  Message=The geckodriver.exe file does not exist in the current directory or in a directory on the PATH environment variable. The driver can be downloaded at https://github.com/mozilla/geckodriver/releases.
  Source=WebDriver
  StackTrace:
   在 OpenQA.Selenium.DriverService.FindDriverServiceExecutable(String executableName, Uri downloadUrl)
   在 OpenQA.Selenium.Firefox.FirefoxDriverService.CreateDefaultService()
   在 OpenQA.Selenium.Firefox.FirefoxDriver.CreateService(FirefoxOptions options)
   在 OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxOptions options)
   在 OpenQA.Selenium.Firefox.FirefoxDriver..ctor()
   在 ConApp***.Service.SeleniumHelper.Test() 在 G:\***.cs 中: 第 17 行
   在 ConApp***.Program.Main(String[] args) 在 G:\***.cs 中: 第 24 行

缺少geckodriver.exe的可执行文件,按照异常提示中的内容,找到geckodriver:

(图片来自:https://github.com/mozilla/geckodriver/releases)

下载后放在对应的编译目录下或者环境变量中。

随后又会出现如下的异常提示:

System.InvalidOperationException
  HResult=0x80131509
  Message=Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line (SessionNotCreated)
  Source=WebDriver
  StackTrace:
   在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   在 OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
   在 OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
   在 OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxDriverService service, FirefoxOptions options, TimeSpan commandTimeout)
   在 OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxOptions options)
   在 OpenQA.Selenium.Firefox.FirefoxDriver..ctor()
   在 ***.Test() 在 G:\***.cs 中: 第 17 行
   在 ***.Main(String[] args) 在 G:\***\Program.cs 中: 第 24 行

没有找到二进制文件,什么是二进制文件?

(图片来自:https://baike.baidu.com/item/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6/996661?fromtitle=Binary%20File&fromid=1889287&fr=aladdin)

安装完Firefox浏览器后再次执行程序:

1593877734297   mozrunner::runner       INFO    Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\***~1\\AppData\\Local\\Temp\\rust_mozprofileLZuStv"

提示“permission denied”,虽然提示“没有权限”,实际上原因是,无法访问Google导致。当把域名修改为https://www.baidu.com 后能够发现,程序能够正常访问并运行。

到这里基于Selenium调用浏览器并访问对应域名的过程基本完成了。

本文分享自微信公众号 - changyandou(changyandou),作者:长烟斗火枪红帽子鹿皮鞋

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python selenium系列(一)

    “Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9,...

    py3study
  • Spring.Net学习系列一

    废话不多说,如果在看本文之前,你还不知道spring.net是什么,还不知道什么是控制反转、IOC容器、依赖注入、面向切面编程那么请你先去了解这些概念,再来看本...

    郑小超.
  • Selenium 系列篇(一):准备篇

    最初的自动化测试主要用于 Web 端,而 Selenium 是使用最为广泛的 Web 自动化测试框架之一

    AirPython
  • 爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

    龙哥
  • (一)如何让selenium爬我们需要的东西

    由于区区在下在学校参加了一个名为创新创业工作室的地方,所以今天老师召集我们给我们开了个会,让我们对他们的网站做补充,缺少资料。(因为他不会做爬虫对某种信息进行实...

    全栈程序员站长
  • Selenium3.X源码分析之开始,走上人生巅峰

    早在2017年,写了系列Python Selenium2代码实例系列,,打算针对Selenium3写个系列,从源码分析开始,但不立flag,写到...

    苦叶子
  • Identity Server4学习系列一

    今天开始学习Identity Server4,顺便了解下.Net Core,以便于完善技术栈,最主要的是要跟上.Net的发展潮流,顺便帮助各位整理下官方文档,加...

    郑小超.
  • 「Python爬虫系列讲解」九、用 Selenium 爬取在线百科知识

    前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式...

    荣仔_最靓的仔
  • Python无头爬虫Selenium系列(01):像手工一样操作浏览器

    自动化爬虫虽然方便,但希望大家能顾及网站服务器的承受能力,不要高频率访问网站。并且千万不要采集敏感数据!!否则很容易"从入门到入狱"

    Excel催化剂
  • Selenium 学习

    官方教程: http://selenium-python.readthedocs.org/

    lpe234
  • webdriver介绍与Selenium RC的比较

    什么是webdriver? webdriver是一个web自动化测试框架,不同于selenium IDE只能运行在firefox上,webdriver能够在不同...

    苦叶子
  • Selenium系列(十五) - Web UI 自动化基础实战(2)

    https://www.cnblogs.com/poloyy/category/1680176.html

    小菠萝测试笔记
  • python selenium系列(二)

    selenium提供了内置的方法完成对待操作元素的定位,主要分为8类,其中,每类又可细分为定位单个元素和定位多个元素,另外还提供了2个私有方法。详细如下:

    py3study
  • python selenium系列(11

    Selenium系列文章已经基本涵盖了主要的知识点,至于PO模式,发现有篇文章写的挺好的,后续转载分享过来,哈哈。Python Web UI自动化技术就要告一段...

    py3study
  • python selenium系列(三)

    开展WEB UI自动化的核心思路,无非就是找到元素,然后操作元素这两个内容。在python selenium系列(二)元素定位方式一文中,已经介绍了如何找到元素...

    py3study
  • python selenium系列(四)

    在前面的selenium系列(二)元素定位方式和selenium系列(三)常用操作类型及方法两节中,已经介绍了web页面元素的识别定位、操作等技术,可能你会觉得...

    py3study
  • python selenium系列(五)

    提起断言,接触过软件测试相关工种的同学们,一定不会陌生。比如,功能测试/自动化测试判断用例是否通过,靠的就是检查测试结果与预期是否一致;稍微不同的是,功能测试的...

    py3study
  • 软件测试进阶之4——编程语言学习技巧

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    MyJie
  • 为什么不推荐Selenium写爬虫

    最近在群里经常会看到有些朋友说,使用Selenium去采集网站,我看到其实内心是很难受的,哎!为什么要用Selenium呢? 我想说下自己的看法,欢迎各位大佬批...

    小歪

扫码关注云+社区

领取腾讯云代金券