1、文本按钮操作相关

  • send_keys()输入文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(2)
dr.find_element_by_id("kw").send_keys("selenium")
  • clear()清除文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
dr.find_element_by_id("kw").clear()
  • click()点击按钮
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(1)
dr.find_element_by_id("su").click()
  • submit()类似输入文本后回车
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(1)
dr.find_element_by_id("kw").submit()
  • size 返回元素的尺寸
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
print (dr.find_element_by_id("su").size)
  • text 获取文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print (dr.find_element_by_id("ls_fastloginfield_ctrl").text)

2、常见的 webdriver 方法

  • get_window_size()  获取浏览器窗口大小
  • set_window_size(480,800)       设置浏览器窗口大小
  • maximize_window()  浏览器窗口最大化
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
print (dr.get_window_size())
time.sleep(2)
dr.maximize_window()
time.sleep(2)
dr.set_window_size(800,500)
  • get_attribute()获取元素属性值
product_name = driver.find_element_by_id('currentItem').get_attribute("title")
if name == product_name:
print ("ok!")
else:
raise AssertionError
  • back()向后
  • forward()向前
  • refresh()刷新
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_link_text("hao123").click()
time.sleep(2)
dr.back()
time.sleep(2)
dr.forward()
time.sleep(2)
dr.refresh()
  • close()关闭当前选项卡页面
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
dr.find_element_by_link_text("交友").click()
time.sleep(2)
dr.close() #关闭当前句柄窗口
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
#打开第一个网页"百度"
dr.get("https://www.baidu.com")
sleep(2)
#打开第二个网页"京东"
js = 'window.open("https://www.jd.com")'
dr.execute_script(js)
sleep(2)
#关闭当前句柄的窗口
dr.close()
  • quit()关闭所有选项卡页面
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
dr.find_element_by_link_text("交友").click()
time.sleep(2)
dr.quit()
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
#打开第一个网页"百度"
dr.get("https://www.baidu.com")
sleep(2)
#打开第二个网页"京东"
js = 'window.open("https://www.jd.com")'
dr.execute_script(js)
sleep(2)
#关闭当前浏览器
dr.quit()
  • 窗口滚动操作

    • js = "window.scrollTo(300,200)"   #300表示左边距,200表示上边距
    • js = "document.documentElement.scrollTop=200" #向下滑动200px
    • js = "document.documentElement.scrollLeft=300" #向右滑动300px
    • execute_script(js)
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.set_window_size(800,500)
time.sleep(2)
js = "window.scrollTo(300,200)" #300表示左边距,200表示上边距
dr.execute_script(js)
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome() dr.get("https://www.cnblogs.com/ZhengYing0813")
# print(dr.get_window_size())
dr.set_window_size(500,500)
sleep(1)
# js = "document.documentElement.scrollTop=200" #向下滑动200px
# js = "document.documentElement.scrollLeft=300" #向右滑动300px
# dr.execute_script(js)
n = 0
while 1000 > n:
n += 100
js = "document.documentElement.scrollTop=" + str(n)
dr.execute_script(js)
sleep(2) sleep(3)
dr.quit()
  • title 获取页面 title
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("当前title:" + dr.title)
  • current_window_handle  当前页面的句柄
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("当前句柄:" + dr.current_window_handle)
dr.find_element_by_link_text("交友").click()
print ("当前句柄:" + dr.current_window_handle)
  • window_handles  当前所有的句柄,返回句柄列表
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("当前句柄:" + dr.current_window_handle)
dr.find_element_by_link_text("交友").click()
print ("所有句柄:" + dr.window_handles)
  • switch_to_window()   切换窗口(一般通过句柄切换)
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("首页title:" + dr.title)
dr.find_element_by_link_text("交友").click()
dr.switch_to_window(dr.window_handles[1])
print ("此时title:" + dr.title)

3、鼠标相关

  • context_click()右击
  • double_click()双击
  • drag_and_drop()拖拽
  • drag_and_drop_by_offset()拖拽
  • move_to_element()鼠标悬停
  • perform()执行
"""
鼠标悬浮
"""
# 第一种方法(二次定位)
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
dr.maximize_window()
dr.get("https://www.baidu.com")
sleep(2)
dr.find_element_by_link_text("设置").click()
dr.find_element_by_link_text("搜索设置").click()
sleep(2)
dr.quit() # 第二种方法
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains #导入鼠标操作模块
import time #导入时间模块
dr = webdriver.Chrome() #webdriver类实例化
dr.get("https://www.baidu.com")
time.sleep(1)
element = dr.find_element_by_link_text("设置") #定位到鼠标要悬浮的元素
ActionChains(dr).move_to_element(element).perform()
#鼠标操作类实例化,传driver驱动 将鼠标悬浮到元素上 执行悬浮操作
time.sleep(1)
dr.find_element_by_link_text("高级搜索").click() #点击设置按钮下的元素
time.sleep(3)
dr.close()
"""
drag_and_drop 拖拽
"""
sourse=driver.find_element_by_id('xx') #定位元素要移动的目标位置
target=driver.find_element_by_id('yy') #执行元素的拖放操作
ActionChains(driver).drag_and_drop(sourse,target).perform()
"""
drag_and_drop_by_offset 拖拽,处理滑块验证
"""
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dr = webdriver.Chrome()
dr.get("https://shopcs.yunyoute.com/login")
dr.maximize_window()
dr.implicitly_wait(10)
time.sleep(2)
drag1 = dr.find_element_by_class_name("evenBox") # 定位到滑块
ActionChains(dr).drag_and_drop_by_offset(drag1,1572,708).perform() # 拖拽到指定坐标 (1572,708)
"""
鼠标右击操作
"""
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dr = webdriver.Chrome()
dr.get("https://shopcs.yunyoute.com/login")
dr.maximize_window()
dr.implicitly_wait(10)
time.sleep(2)
inp = dr.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div/div/div/div/div[3]/div[1]/input[2]')
ActionChains(dr).context_click(inp).perform()

4、selenium 中三种等待方式

(1)线程等待(强制等待):time.sleep(s)

import time
from selenium import webdriver dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
time.sleep(2)
dr.quit()

(2)隐式等待:dr.implicitly_wait(s)  等待页面所以的元素加载完成,则会自动进行下一步操做,如果等待时间超过设置的时间则会报错

from selenium import webdriver

dr = webdriver.Chrome()
dr.implicitly_wait(10)
dr.get("https://www.baidu.com")
dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
dr.quit()

(3)显式等待:等待页面特定的某个元素加载后,才会进行下一步操作,如果在设定的时间内没有找到则会报错

from selenium import webdriver
# 两种导入WebDriverWait方式
# from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#通过 as 关键字将 expected_conditions 重命名为EC
from selenium.webdriver.support import expected_conditions as EC
#导入By模块
from selenium.webdriver.common.by import By dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
#presence_of_element_located 必须以元组的形式传入,所以使用到By方法进行定位
try:
element = WebDriverWait(driver=dr,timeout=10,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID,"kw")))
element.send_keys("selenium")
finally:
dr.quit()
  • WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)

    • driver:浏览器驱动
    • timeout:最长超时时间,默认以秒为单位
    • poll_frequency:检测的间隔(步长)时间,默认为 0.5S
    • ignored_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException 异常
  • WebDriverWait() 一般由 until() 或 until_not() 方法配合使用
until(method, message=' ')      #调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=' ') #调用该方法提供的驱动程序作为一个参数,直到返回值为False
  • EC 预置条件模块具有很多类型的判断:

    • presence_of_element_located                  判断当前元素是否存在
    • presence_of_all_elements_located             判断一组元素是否存在
    • text_to_be_present_in_element_value       判断元素值是否有xx文本信息
    • presence_of_all_elements_located             判断一组元素是否存在

5、单 / 复选框相关

dr.get("http://127.0.0.1:8848/html/checkbox.html")
list=dr.find_elements_by_xpath("//*[@class='tbmu']/td/label")
for i in list:
i.click()#勾选全部标签

6、下拉框处理

(1)select 模块定位

  • Select 提供了三种选择方法:    

    • select_by_index(index) ——通过选项的顺序,第一个为 0
    • select_by_value(value) ——通过 value 属性
    • select_by_visible_text(text) ——通过选项可见文本
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Drop_down_box.html")
time.sleep(1)
element = dr.find_element_by_id("birthprovince")
Select(element).select_by_index(5)
Select(element).select_by_value("山西省")
Select(element).select_by_visible_text("河北省") 
  • Select 提供了四种方法取消选择:(只能取消选择多选选项)

    • deselect_by_index(index)
    • deselect_by_value(value)
    • deselect_by_visible_text(text)
    • deselect_all()

(2)二次定位(基本思路,先定位 select 框,再定位 select 里的选项)

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Drop_down_box.html")
time.sleep(1)
#两次定位
element = dr.find_element_by_id("birthprovince")
element.find_element_by_xpath('//*[@id="birthprovince"]/option[5]').click()

7、frame 处理

(1)switch_to.frame()选择一个 frame  --->  只能用 id 或 name 定位 frame

from selenium import webdriver
import time dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("xfs")
dr.find_element_by_id("ls_password").send_keys("")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("学员作业专区").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click() #发帖
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
dr.switch_to_frame("e_iframe") #直接定位frame框架,只能通过id/name定位
time.sleep(1)
dr.find_element_by_xpath('/html/body').send_keys(u"测试一下")

(2)假如 iframe 没有可定位的 id 或 name 那么可以通过 xpath 先定位到 iframe,再将对象传给 switch_to.frame():如下

from selenium import webdriver
import time dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("zhengying")
dr.find_element_by_id("ls_password").send_keys("zhengying123456")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("学员作业专区").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click()
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
frame = dr.find_element_by_css_selector("#e_body > div > iframe") #先定位到frame
dr.switch_to.frame(frame) #再将frame的对象传进去
time.sleep(1)
dr.find_element_by_xpath('/html/body').send_keys("dmlafjiuwnkdsncqwfcwnoqncsdknfwcnsdkfn")

(3)dr.switch_to.default_content()  取消选择一个 frame(跳回最外层的页面)

dr.switch_to.parent_frame()  取消选择一个 frame(跳出当前 frame)

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("zhengying")
dr.find_element_by_id("ls_password").send_keys("zhengying123456")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("学员作业专区").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click()
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
dr.switch_to_frame("e_iframe") #通过frame的id进行传参
dr.find_element_by_xpath('/html/body').send_keys(u"测试一下")
time.sleep(2)
dr.switch_to_default_content()
time.sleep(2)
dr.find_element_by_link_text("学员作业专区").click()

8、弹窗相关

  • switch_to.alert.accept()   #确定
  • switch_to.alert.dismiss()   #取消
  • switch_to.alert.text   #获取弹框信息
from selenium import webdriver
import time dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Alert.html")
time.sleep(2)
dr.find_element_by_class_name("xxx").click()
time.sleep(2)
# dr.switch_to_alert().accept() #确定
print (dr.switch_to_alert().text) #捕获弹窗内容
time.sleep(1)
dr.switch_to_alert().dismiss() #取消

9、数据库操作

  • dos窗口下安装pymysl -->  pip install pymysql
  • 游标概念:SQL 的游标是一种临时的数据库对象,游标的一个常见用途就是保存查询结果,以便后续调用或者使用(游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果)
  • 游标 cursor():该方法会帮我们获取操作游标这时游标会为我们提供方法:
    • 执行脚本命令
    • 接受返回值
  • db=pymysql.connect("IP 地址","用户名","密码","数据库名",charset='utf8')
  • cursor=db.cursor() 获取游标
  • fetchone()   提取第一行数据
  • fetchall()   提取所有数据
  • fetchmany(size)  根据 size 值提取具体行数
  • 注意:当游标cursor中的某条数据被取出后,当前查询结果中则不能再次提取该条数据
import pymysql

def con(ip,user,password,database,port,sql):
db = pymysql.connect(ip,user,password,database,int(port),charset='utf8')
cursor = db.cursor()
cursor.execute(sql)
print (cursor.fetchone())
print (cursor.fetchall())
print (cursor.fetchmany(5))
db.close() con("192.168.1.222","root","","study",3306,"select * from user;")

python selenium(常用关键字)的更多相关文章

  1. RF - selenium - 常用关键字 - 示例

    1. 打开浏览器 Open Browser    http://www.baidu.com    chrome 2. 关闭浏览器 Close Browsers Close All Browser 3. ...

  2. RF - selenium - 常用关键字

    1. 打开浏览器 Open Browser    htpp://www.testclass.net    chrome 2. 关闭浏览器 Close Browsers Close All Browse ...

  3. python selenium常用基本方法---H5和键盘鼠标操作

    一.模拟手机打开页面(H5测试) from selenium import webdriver mobile_emulation = {'deviceName':'iPhone X'} options ...

  4. Python selenium常用用法

    1.获取当前页面的Url 方法:current_url 实例:driver.current_url 2.获取元素坐标 方法:location 解释:首先查找到你要获取元素的,然后调用location方 ...

  5. [python]selenium常用的操作

    浏览器 1.火狐浏览器 br = webdriver.Firefox() #最大化窗口br.maximize_window() br.get('http://baidu.com') 2.谷歌浏览器 b ...

  6. Python+Selenium(webdriver常用API)

    总结了Python+selenium常用的一些方法函数,以后有新增再随时更新: 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口:  ...

  7. Python+selenium常用方法(Webdriver API)

    小编整理了目前学习的Python+selenium常用的一些方法函数,以后有新增再随时更新. 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() ...

  8. 基于python的selenium常用操作方法(1)

    1 selenium定位方法    Selenium提供了8种定位方式. ·         id ·         name ·         class name ·         tag ...

  9. Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结

    由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...

  10. python+selenium自动测试之WebDriver的常用API(基础篇二)

    本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.常见特殊情况处理如iframe/弹窗处理 有 ...

随机推荐

  1. json.dumps() 和 json.loads()

    转载: https://blog.csdn.net/qinglingls/article/details/96476368

  2. 让 .NET 轻松构建中间件模式代码(二)

    让 .NET 轻松构建中间件模式代码(二)--- 支持管道的中断和分支 Intro 上次实现了一个基本的构建中间件模式的中间件构建器,现在来丰富一下功能,让它支持中断和分支,分别对应 asp.net ...

  3. AJ学IOS(33)UI之Quartz2D雪花飘落效果刷帧

    AJ分享,必须精品 效果: 可以加入随机数实现真的飘落效果哦. 代码: -(id)initWithCoder:(NSCoder *)aDecoder { //请注意这里一定要先初始化父类的构造方法 i ...

  4. 02-css3之2D转换

    一.CSS3 -2D转换 转换(transform)可以实现元素的位移.旋转.缩放等效果.可以理解为变形. 1. 2D转换之移动translate 可以改变元素的页面中的位置,类似于定位. 1.1语法 ...

  5. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings

    Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...

  6. Eclipse Hadoop源码阅读环境

    一.解压hadoop src包到workspace目录.为加快下载jar包的速度,在eclipse的maven设置里将配置文件的路径设置正确,然后配置maven的settings.xml: <m ...

  7. 最新超详细VMware虚拟机安装完整教程

    一.基础介绍 VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows.DOS.LINUX系统.与“多启动”系统相比,VMWare采用了完全不同的概念.多启 ...

  8. [PHP] 生成二维码(两种方法)

    方法一:(调用google二维码接口,本人测试网不好,不好用!) <?php //1.封装生成二维码图片的函数(方法) /** *利用google api生成二维码图片 * $content:二 ...

  9. Java8新特性(1):Lambda表达式

    Lambda表达式可以理解为一种匿名函数:没有名称,但有参数列表.函数主体.返回类型.它是行为参数化的一种实现,行为参数化是指将不同的行为作为参数传递给方法,方法的所具备的能力取决于它接收的行为参数. ...

  10. Spring Cloud 系列之 Sleuth 链路追踪(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一) 本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elas ...