热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

selenium自动化测试的入门级教程!必看!

1.安装pipinstallselenium2.准备驱动当前支持诸如chrome,firefox,Edge,IE等主流浏览器,前提是要下载浏览器驱动(驱动下载地址上网自行百度),否


1.安装

pip install selenium


2.准备驱动

当前支持诸如chrome,firefox,Edge,IE等主流浏览器,前提是要下载浏览器驱动(驱动下载地址上网自行百度),否则会报诸如以下此类的错误:

selenium.common.exceptions.WebDriverException: Message: 'IEDriverServer.exe' executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html and read up at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

下载浏览器版本匹配的驱动后,放在python目录下的Scripts目录下即可。

 

 

 

 


3.完成以上步骤后,下面便可以调用使用浏览器了

取个简单的例子:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


if __name__ == '__main__':
driver = webdriver.Firefox()
driver.set_window_position(x=50,y=60)
driver.set_window_size(http://www.python.org")
print driver.title
driver.close()

简单介绍一下上面例子:



  • 首先实例化一个FireFox WebDriver对象。

  • 之后,driver.set_window_position方法来设置浏览器窗口的起始位置(就是浏览器左上角的坐标位置)

  • driver.set_window_size用来设置浏览器窗口的大小。

  • 重点的dirver.get()方法,用来导航到给定的url地址的网页。WebDriver 将会等待直到页面全部加载完成后才会把控制权返回给脚本。

  • 最终,浏览器窗口关闭。当然,你也可以调用driver.quit()方法来结束浏览器调用,两个方法的不同之处在于,close()方法是关闭当期的浏览器窗口,而quit()方法是退出整个浏览器。


4.页面交互

要与页面进行交互,首先我们需要定位到某个元素,下面重点结束一下元素的定位方法。举个简单的例子:

 

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

以上三种方法都能定位到input元素。在webdriver中使用xpath方法时要格外小心。如果页面上有多个元素匹配到查询,只有第一个元素会被返回。如果没有匹配到任何东西,就会报NoSuchElementException的错误。

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //form[@class='search_index_box auto fix mt10']/input[3]

当然了,在webdriver中不仅仅是xpath方法找不到元素会报错,所有的方法在找不到给定元素的时候都会报错。比如:

driver.get("http://www.baidu.com")
driver.find_element_by_id('zhanglinpeng')

 

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="zhanglinpeng"]


在webdriver中,支持的找元素的方法有:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

接下来,我们逐个的对其进行介绍: 第一个,很简单,举个例子就可以很清楚的看明白了:

 

 为了获取该元素,我们可以使用find_element_by_id方法。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


if __name__ == '__main__':
driver = webdriver.Firefox()
driver.set_window_position(x=50, y=60)
driver.set_window_size(http://www.baidu.com")
inputelement = driver.find_element_by_id('kw')
print inputelement.get_attribute('maxlength')
print driver.title
inputelement.send_keys("selenium")
driver.close()

 

 第二个,find_element_by_name

 

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


if __name__ == '__main__':
driver = webdriver.Firefox()
driver.set_window_position(x=50,y=60)
driver.set_window_size(http://www.jianshu.com/")
inputelement = driver.find_element_by_name('q')
# driver.find_element_by_xpath("//form[@class='search_index_box auto fix mt10']/input[3]").send_keys()
inputelement.send_keys('selenium')
driver.find_element_by_class_name('search-btn').click()
driver.close()

第三个,find_element_by_xpath,










 

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

 

username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")

 

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")

上面的这些都是比较中规中矩的使用xpath方法,其实在实际使用中,可以结合实际情况,更加灵活地 使用,比如:

 

第四个,find_element_by_link_text 这个是在当你知道链接文本内容的时候可以使用。

 



Are you sure you want to do this?


Continue
Cancel

 

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

最后介绍一个find_element_by_tag_name 顾名思义就是使用标签名来找元素。

 

 

 


5.一些API接口使用

首先介绍一下WebDriver: driver = webdriver.Firefox() 执行了该命令之后,实际上

 

 

 

 

 

 可以看出这个实例化的类实际上继承的是remote文件中的父类WebDriver,该类的具体介绍会在另一文档中具体介绍。 但是有一个属性函数需要着重介绍一下那就是:self._switch_to = SwitchTo(self)该类的两个方法经常使用到

 

 

 

 

 

 举例 driver.switch_to.window(driver.window_handles[-1]) 参数driver.window_handles是一个列表,包含当前session所有需要处理的窗口。 还有需要提到的是浏览器访问的当前和历史的转换

 

 

 介绍一下ActionChains

 

 

 

 

 

 

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=loc+22 , yoffset=y - 445).perform()

 

ActionChains(driver).release(on_element=element).perform()


6.异常介绍


定位元素定位不到的时候,会报NoSuchElementException的错误 WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_cut_bg gt_show']/div").is_displayed()) 等待元素出现的时候,超时会报TimeoutException的错误 某元素在定位事,如果是临时出现,未定位到会报StaleElementReferenceException的错误。

 

 解决此类问题的一个方案为:

serialnum = change_content_scriper(driver, count)
# print '000',serialnum
attempt = 0
while attempt <2:
try:
while 'disabled' not in driver.find_element_by_id('altInfo_next').get_attribute('class'):
driver.find_element_by_id('altInfo_next').click()
WebDriverWait(driver, 30).until(lambda the_driver: int(the_driver.find_element_by_id('altInfo').find_element_by_xpath(".//tbody/tr[1]/td[1]").text)>serialnum)
serialnum = change_content_scriper(driver, count)
# print '111',serialnum
break
except StaleElementReferenceException as e:
pass
attempt += 1


PS:如果内容对你有帮助,留下个赞呗!加入交流群1125760266一起来探讨吧~

 



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
多米音乐_34063629
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有