python3+selenium3.13的简单操作

1.浏览器

  1.1 浏览器窗口大小位置

 driver.set_window_size(self, width, height, windowHandle) 将某个窗口设置为固定大小

 driver.set_window_position(self, x, y, windowHandle) 将某个窗口移动到指定的位置

 driver.set_window_rect(self, x, y, width, height, windowHandle) 将某个窗口设置为固定的大小移动到指定的位置

 driver.maximize_window() 窗口最大化

driver.minimize_window() 窗口最小化

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")driver.set_window_size(480, 800) driver.set_window_rect(300, 300, 480, 800)driver.set_window_position(300, 300)driver.maximize_window()driver.minimize_window()

  1.2 控制浏览器的后退、前进

   driver.back()

   driver.forward()

from selenium import webdriverimport timedriver = webdriver.Firefox()f_url = "https://www.baidu.com"s_url = "https://news.baidu.com"driver.get(f_url)time.sleep(1)driver.get(s_url)time.sleep(1)driver.back()assert f_url in driver.current_url, "current url not first url"print(driver.current_url)time.sleep(1)driver.forward()assert s_url in driver.current_url, "current url not second url"print(driver.current_url)driver.close()

  1.3 模拟浏览器刷新

   driver.refresh()

2.元素操作

  clear  清除文本

  send_keys(value)  模拟按键输入

  click()  单击

  submit()  提交表单,如搜索框输入内容后的回车操作,就可以通过submit()方法模拟

  size  返回元素的尺寸

  text  获取元素的文本

  get_attribute(name)  获得属性值

  is_displayed()  返回该元素是否可见,布尔类型

from selenium import webdriverimport timedriver = webdriver.Firefox()f_url = "https://www.baidu.com"driver.get(f_url)driver.find_element_by_id("kw").send_keys("hello")
print(driver.find_element_by_id("cp").text)
driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("kw").submit()
print(size)print(driver.find_element_by_id("kw").get_attribute("name"))print(driver.find_element_by_id("kw").is_displayed())
driver.close()


3.鼠标事件

  perform()  执行所有ActionChains中存储的行为

  context_click()  右击

  double_click()  双击

  drag_and_drop()  拖动

  move_to_element()  鼠标悬停

  右击没有实现from selenium import webdriverfrom selenium.webdriver.common.action_chains import  ActionChainsimport timedriver = webdriver.Firefox()f_url = "https://www.baidu.com"driver.get(f_url)driver.find_element_by_link_text("地图").click()driver.find_element_by_xpath("//span[@class=‘success‘]").click()nowPos = driver.find_element_by_xpath("//*[@class=\"normal\"][1]")ActionChains(driver).context_click(nowPos).perform()time.sleep(1)try:    driver.find_element_by_xpath("//span[@id=\"cmitem_start\"]").click()except Exception as e:    print("not found")

time.sleep(1)driver.close()

  鼠标悬停

from selenium import webdriverfrom selenium.webdriver.common.action_chains import  ActionChainsimport timedriver = webdriver.Firefox()f_url = "https://www.baidu.com"driver.get(f_url)bdMore = driver.find_element_by_link_text("设置")ActionChains(driver).move_to_element(bdMore).perform()driver.find_element_by_link_text("搜索历史").click()time.sleep(2)driver.close()  鼠标双击没有找到适用的场景,没有尝试
element = driver.find_element_by_link_text("xx")ActionChains(driver).double_click(element).perform()
  鼠标拖放没有找到适用的场景,没有尝试
e1 = driver.find_element_by_xpath("") #源位置e2 = driver.find_element_by_xpath("") #目标位置ActionChains(driver).drag_and_drop(e1, e2).perform()  #执行拖放
  

4.键盘事件

  sendkeys可以模拟键盘输入,也可以用来模拟键盘上的按键,甚至是组合键

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.action_chains import  ActionChainsfrom time  import sleep,ctimedriver = webdriver.Firefox()driver.get("https://www.baidu.com")el = driver.find_element(By.ID, "kw")el.send_keys("seleniumm")el.send_keys(Keys.BACK_SPACE)el.send_keys(Keys.SPACE)el.send_keys("教程")el.send_keys(Keys.CONTROL, ‘a‘)el.send_keys(Keys.CONTROL, ‘x‘)el.send_keys(Keys.CONTROL, ‘v‘)el.send_keys(Keys.ENTER)driver.close()
send_keys(Keys.BACK_SPACE) 删除键BackSpace
send_keys(Keys.SPACE) 空格键Space
send_keys(Keys.TAB) 制表键Tab
send_keys(Keys.ESPACE) 回退键Esc
send_keys(Keys.ENTER) 回车键Enter
send_keys(Keys.CONTROL,‘a‘) 全选Ctrl+A
send_keys(Keys.CONTROL,‘c‘) 复制CTRL+C
send_keys(Keys.CONTROL,‘x‘) 剪切CTRL+X
send_keys(Keys.CONTROL,‘v‘) 粘贴Ctrl+V
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12  

问题:如果遇到以下错误,是没有导入Keys导致的
from selenium.webdriver.common.keys import Keys

5.获得验证信息

  title  获取页面标题 

  current_url   当前的URL

  text   获取标签对之间的文本信息

driver = webdriver.Firefox()driver.get("https://www.baidu.com")print(driver.title)print(driver.current_url)driver.close()

6.设置等待

  6.1 显式等待

  显示等待使web driver等待某个条件成立时继续执行,否则跑出超时异常TimeoutException。WebDriverWait类是WebDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到就抛出异常。

  WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  driver:浏览器驱动

  timeout:最长超时时间,默认以秒为单位

  poll_frequency:检测的间隔时间,默认0.5秒

  ignored_exceptions:超时后的异常信息,默认抛NoSuchElementException异常

  WebDriverWait一般由until()或until_not()方法配合使用

  until(method, message=‘‘) 调用该方法提供的驱动程序作为一个参数,直到返回值为true

  until_not(method, message=‘‘) 调用该方法提供的驱动程序作为一个参数,直到返回值为false

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time  import sleep,ctimefrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC #将expected_condtions重命名为ECdriver = webdriver.Firefox()driver.get("https://www.baidu.com")el = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))#将EC方法作为参数传入el.send_keys(‘selenium‘)driver.close()expected_conditions类提供的预期条件判断方法:
title_is 判断当前页面的标题是否等于预期
title_contains 判断当前页面的标题是否包含预期字符串
presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
visibility_of_element_located 判断元素可见(元素非隐藏,且元素宽和高都不等于0)
visibility_of 与上一个方法相同,只是上一个方法参数为定位;该方法接收的参数为定位后的元素
presenece_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。例如,在百度首页有n个元素的class为mnav,那么只要有一个存在,就返回true
text_to_be_present_in_element 判断某个元素的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回true并且switch进去,否则返回false
invisibility_of_element_located 判断某个元素是否不存在与DOM树或不可见
invisibility_to_be_clickable 判断元素是否可见且可以点击
staleness_of 等到一个元素从DOM树中移除
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位
alert_is_present 判断页面上是否存在alert

  6.2 隐式等待

  隐式等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。Web Driver提供了implictly_wait()方法来实现隐式等待,默认设置为0.

implicitly_wait(seconds)

from selenium import webdriverfrom time import ctimedriver = webdriver.Firefox()driver.get("https://www.baidu.com")driver.implicitly_wait(10) #设置隐式等待时间为10秒try:    print(ctime())    driver.find_element_by_id("kw22").send_keys("selenium")except Exception as e:    print(e)finally:    print(ctime())driver.close()

  6.3 休眠 time.sleep(seconds)

7.定位一组元素

  定位一组元素与定位单个元素方法类似,唯一的区别是在element为复数。

  定位一组元素的场景:

    1.批量操作元素,例如勾选页面上的所有的复选框

    2.先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的checkbox,然后选择其中的一个进行操作。

driver.find_element_by_id()
driver.find_elements_by_id()
driver.find_element_by_class_name()
driver.find_elements_by_class_name()
driver.find_element_by_name()
driver.find_elements_by_name()
driver.find_element_by_link_text()
driver.find_elements_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_elements_by_partial_link_text()
driver.find_element_by_tag_name()
driver.find_elements_by_tag_name()
driver.find_element_by_xpath()
driver.find_elements_by_xpath()
driver.find_element_by_css_selector()
driver.find_elements_by_css_selector()

  操作复选框 len()计算元素的个数 pop()用来取消勾选

  pop() pop(-1)默认获取最后一个

  pop(index) 获取下标为index的元素

例子:该页面的选择框为单选,选择后再次点击不能取消选择。

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time  import sleep,ctime
driver = webdriver.Firefox()driver.get("https://www.12321.cn/web")styleN = driver.find_elements_by_class_name("bllxCheck")print(len(styleN)) #打印长度4for i in styleN:    i.click()    sleep(1)
styleN.pop(2).click() #选择第3个选框
driver.close() 

8.多表单切换

存在多个iframe时,可以通过获取1组元素再进行操作,操作完一定要返回上一层。

from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://sahitest.com/demo/iframesTest.htm")ifrN = driver.find_elements_by_css_selector("iframe")for i in ifrN:    driver.switch_to.frame(i)    driver.find_element_by_css_selector("a[href=\"linkTest.htm\"]").click()    time.sleep(1)    driver.switch_to.parent_frame()driver.close()

9.多窗口切换

  在页面操作过程中,如果弹出新的窗口,此时需要切换到新打开的窗口进行操作。否则driver依然停留在原来的页面,针对新窗口的操作会出现错误。

  设计的方法:获取所有句柄(window_handles)、当前窗口句柄(current_window_handle)、切换到相应到窗口(switch_to_handle(句柄))

from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://baidu.com")search_window = driver.current_window_handledriver.find_element_by_css_selector("div[id=‘u1‘]>a[name=‘tj_login‘]").click()time.sleep(1)driver.find_element_by_link_text("立即注册").click()time.sleep(1)all_handle = driver.window_handlesfor handle in all_handle:    print(handle)    if handle != search_window:        print("not search window")    if handle == search_window:        print("search window")driver.quit()

10.警告框处理

警告框有3种,依次为alert、confirm、prompt。操作有accept(),dismiss(),send_keys(value)

from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://sahitest.com/demo/alertTest.htm")driver.find_element_by_name("t1").send_keys("alert test")alert_button = driver.find_elements_by_css_selector("input[type=\"button\"]")print(len(alert_button))for al in alert_button:    al.click()    time.sleep(1)    driver.switch_to.alert.accept()    time.sleep(1)driver.quit()
from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://sahitest.com/demo/confirmTest.htm")driver.find_element_by_name("b1").click()time.sleep(1)driver.switch_to.alert.dismiss()time.sleep(1)driver.find_element_by_name("b1").click()time.sleep(1)driver.switch_to.alert.accept()time.sleep(1)driver.quit()
from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://sahitest.com/demo/promptTest.htm")driver.find_element_by_name("b1").click()driver.switch_to.alert.send_keys("hello world")driver.switch_to.alert.dismiss()driver.find_element_by_name("b1").click()driver.switch_to.alert.send_keys("hello world")driver.switch_to.alert.accept()driver.quit()

10.上传文件

  一般web页面上传需要打开本地的window窗口,而webdriver是不能操作windows控件的。

  对于web页面的上传功能实现一般有以下2中方式:

  普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器

  插件上传:一般是基于flash、JavaScript、ajax等技术所实现的上传功能

  1.send_keys实现上传

  没有找到合适的网站使用send_keys上传

  2.没有找到适合mac的插件上传文件

  此处等待日后补充

  

11.下载文件

  下载文件对照表http://tool.oschina.net/commons

13. 操作cookie

  有时需要验证cookie是否正确,因为基于真是cookie的测试是无法通过白盒和集成测试进行的。

  cookie的使用场景:开发人员开发一个功能,当用户登陆后,会将用户的用户名写入浏览器cookie,指定的key为username,我们就可以通过username找到对应的value。如果找不到username或value,就说明cookie没有成功的保存到浏览器。

  get_cookies()  获得所有cookie信息

  get_cookie(name)  返回字典key为name的cookie信息

  add_cookie(cookie_dict) 此处的dict注意格式,name、value要分别指定 

  delete_cookie(name,optionsString)

  delete_all_cookies()

from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://www.baidu.com")print(driver.get_cookies())driver.add_cookie({‘name‘: ‘money‘, ‘value‘: ‘shield‘})print(driver.get_cookie(‘money‘))#print(driver.get_cookie(‘team2‘))driver.delete_cookie(‘money‘)driver.delete_all_cookies()driver.close()

14.调用javascript虽然web driver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,需要借助JavaScript来控制浏览器的滚动。web driver提供了execute_script()的方法来执行JavaScript代码。  1.调整浏览器滚动条
from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://www.baidu.com")driver.set_window_size(600, 600)driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("su").click()time.sleep(2)js = "window.scrollTo(100,450)"driver.execute_script(js)time.sleep(3)driver.close()
  2.向富文本框输如内容向页面中的textarea输入内容。文本框的前端代码:<textarea id="id" style="width:98%" cols="50‘ rows="5" class="textarea" />text = "input text"js = "var sum=document.getElementByOd(‘id‘); sum.value=‘" + text + "‘;"driver.executes_script(js)没有找到合适的场景,没有测试15.处理HTML的视频播放https://v.autohome.com.cn/v-1930327.html#pvareaid=3311300return arguments[0].currentSrc; 获取视频文件的网络存储地址return arguments[0].duration;获取视频时长return arguments[0].play();播放视频return arguments[0].pause();暂停视频
from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("https://v.autohome.com.cn/v-1930327.html#pvareaid=3311300")print("video title:", driver.find_element_by_css_selector("div>h1").text)video = driver.find_element_by_css_selector("video")print(‘pause‘)driver.execute_script("return arguments[0].pause();", video)time.sleep(2)url = driver.execute_script("return arguments[0].currentSrc;", video)print("video times:", driver.execute_script("return arguments[0].duration;", video))print("video url:", url)print(‘play‘)driver.execute_script("return arguments[0].play()", video)time.sleep(2)driver.close()
16.窗口截图get_screenshot_as_file("路径") 将截图保存为文件get_screenshot_as_png() 这个是获取屏幕截图,保存的是二进制数据,很少用到

 get_screenshot_as_base64()

这个方法也是获取屏幕截图,保存的是base64的编码格式,在HTML界面输出截图的时候,会用到。

比如,想把截图放到html测试报告里。
driver.get_screenshot_as_base64()

river = webdriver.Firefox()driver.implicitly_wait(10)driver.get("http://www.baidu.com")driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("su").click()actureText = driver.find_element_by_css_selector("span.nums_text").textexpectText = "百度为您找到相关结果约"print(actureText)assert expectText in actureText, "结果未找到"driver.get_screenshot_as_file("/Users/chenshanju/Desktop/test.png")driver.get_screenshot_as_png()time.sleep(2)driver.close()
17.关闭窗口driver.close()  关闭当前窗口driver.quit()  退出浏览器

18.验证码的处理   18.1 去掉验证码只要把验证码的相关代码注释掉即可。如果测试环境,会很方便;如果线上环境,风险很高。 18.2 设置万能验证码在程序中留一个后门,设置一个万能验证码。只要用户输入万能验证码,程序就认为验证通过,否则就判断用户输入的验证码是否正确。
from random import randintverify = randint(1000, 9999)number = int(input("input a number:"))if number == verify :    print("login success")elif number == 123456 : #设置万能验证码    print("login success")else:    print("uncorrect verify")
 18.3 验证码识别技术可以通过python-tesseract来识别图片验证码。不过,验证码形式繁多,大多验证码识别技术,识别率很难达到100%

18.4 记录cookie
driver.get("http://www.test.com")driver.add_cookie({‘name‘: ‘Login_UserNumber‘, ‘value‘: ‘username‘})driver.add_cookie({‘name‘: ‘Login_password‘, ‘value‘: ‘password‘})driver.get("http://www.test.com")

原文地址:https://www.cnblogs.com/csj2018/p/9249700.html

时间: 2024-11-16 00:42:02

python3+selenium3.13的简单操作的相关文章

python3.6+selenium3.13 自动化测试项目实战一

一.项目介绍 目的: 测试某官方网站登录功能模块可以正常使用 用例: 1.输入格式正确的用户名和正确的密码,验证是否登录成功: 2.输入格式正确的用户名和不正确的密码,验证是否登录失败,并且提示信息正确: 3.输入格式正确的用户名和任意密码,验证是否登录失败,并且提示信息正确: 4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确: 5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确: 环境: Windows10 +Python3.6+selenium3.13+Pycha

Python3+Selenium3自动化测试学习之路

1.Python3+Selenium3自动化测试环境搭建 2.Python简单学习 3.元素定位 4.常用浏览器操作 5.断言与验证信息 6.表单.窗口切换 7.上传.下载文件 8.单元测试框架 9.HTML测试报告 10.PO设计模式(Page Object) 未完待续... 原文地址:https://www.cnblogs.com/yichenxinliang/p/12273276.html

C++ 文件的简单操作

=================================================================== 编写程序时,很多时候都要对文件进行操作,比如从文件中读取数据,通过程序将一些数据保存到文件中等等.. 以下是c++对文件的一些简单操作. =================================================================== 一.文件输出 要将程序中的数据输出到文件中,一般需要以下5个步骤: ① 包含fstream

oracle创建用户ORA-01045:user lacks CREATE SESSION privilege 及一些简单操作(one lesson)

scott用户成功连接数据库的具体方法: 1.grant connect, resource to scott;2.grant create session to scott; 3.cmd4.sqlplus scott/tiger Oracle的安全 1.用户管理 用户至少需要会话的权利,否则连接也不成功: 用户在会话的权利上,应该有其他操作的权利: Oracle的用户和口令不区分大小写,真是让人大跌眼镜: Oralce中,所有用户必须明确被授权,才可以操作: SQL Server中,创建的用户

关于链表的一些简单操作

终于上黄金了.. 然后就是一波2连败... 最近 完全不想做题啊  一做题 就想碎觉啊 郁闷死了 根据书本 写了点关于单向链表的简单操作 可能还存在点小bug---先放它一马吧 以后可能再进行补充关于它的操作 毕竟还有好多 先慢慢找回敲键盘打代码的感觉 厌 1 /* 2 线性表之单向链表的一些常见操作 3 */ 4 #include <iostream> 5 using namespace std; 6 7 typedef int ElemType; 8 typedef struct LNod

ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作

问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令. ZooKeeper 常用四字命令见下表 1 所示: 表 1 : ZooKee

七技术之Git服务器gitolite的搭建及简单操作

最近人比较懒了,为了让自己改变一下,所以决定抽空去学习一些新的技术,对于这些新的技术,目前的要求不是很高,只是要求入门就可以了. 由于本人只是花三四天整出来的东西,所以不洗勿喷,另外难免会有错误,如有还请指出. 环境: Ubuntu server 14.04.1 .Git 1.9.1 gitolite3 对于Git的介绍这里就不介绍,有兴趣的大家可以自己去网上搜搜. 下面介绍怎么安装Git服务器gitolite,以及怎么建立仓库.添加用户等操作,本篇文章不会介绍太多的Git本身的命令,因为我自己

数据分析软件及spss简单操作

数据分析软件介绍 SPSS统计软件      SPSS是英文Statistical package for the social science 的缩写,翻译成汉语是社会学统计程序包,20世纪60年代末由美国斯坦福大学的三位研究生研制,1975年在芝加哥组建SPSS总部.SPSS系统特点是操作比较方便,统计方法比较齐全,绘制图形.表格较有方便,输出结果比较直观.SPSS是用FORTRAN语言编写而成.适合进行从事社会学调查中的数据分析处理.最新版为13.0版.网址:http://www.spss

简单操作Zabbix安装配置与邮件报警(centos 7.4)

Zabbix官网下载地址:https://www.zabbix.com/download 实验拓扑:zabbix server端: 192.168.80.101 公网环境 centos 7.4 LAMP架构zabbix angent端: 192.168.80.102 公网环境 centos 7.4注:zabbix(音同 z?bix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix由2部分构成,zabbix server与可选组件zabbix agent