python——selenium总结

selenium总结

文章目录

  • selenium总结
    • 一 、 环境配置
    • 二 、selenium元素定位 (8种)
    • 三、断言
    • 四、元素等待
    • 五、浏览器控制
    • 六、窗口截图
    • 七、 警告框处理
    • 八、鼠标事件
    • 九、键盘事件
    • 十、内嵌网页处理

一 、 环境配置

1、为 Python 安装 selenium模块,pip install selenium

2、下载对应浏览器驱动

Chromedriver

http://npm.taobao.org/mirrors/chromedriver/

版本对照表:https://blog.csdn.net/BinGISer/article/details/88559532

Firefoxdriver

https://github.com/mozilla/geckodriver/releases

版本对照表:https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html
3、配置环境变量
设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。

我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver

二 、selenium元素定位 (8种)

  • find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素

  • find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素

  • find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素

  • find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素

  • find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素

  • find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素

  • find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素

  • find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素

值得注意的是,上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法,就是element加s。

示例代码:

  • 通过id定位:
driver.find_element_by_id('kw')
  • 通过class name定位:
 dr.find_element_by_name("wd")
  • 通过class name定位:
dr.find_element_by_class_name("s_ipt")
  • 通过tag name定位:
dr.find_element_by_tag_name("input")
  • 通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
  • 通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
  • 通过link text定位:
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
  • 通过partial link text定位:
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

三、断言

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。

属性 说明
title 用于获得当前页面的标题
current_url 用户获得当前页面的URL
text 获取搜索条目的文本信息

示例代码:

from selenium import webdriver
from time import ctime
import time
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()

#通过ID进行匹配查找

idele1 = driver.find_element_by_xpath('//*[@id="s-hotsearch-wrapper"]/div/a[1]/div')
print(idele1.text)

idele = driver.find_element_by_id('kw')
idele.send_keys("selenium")
print(driver.title)
print(driver.current_url)
driver.quit()

打印结果

百度热榜
百度一下,你就知道
https://www.baidu.com/

四、元素等待

webdriver提供了两种类型的元素等待,隐式等待 和 显式等待

  • 1.隐式等待:
    隐式等待方式非常简单,就是driver直接调用 implicitly_wait()。implicitly_wait() 默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。

示例代码:

from selenium import webdriver
from time import ctime
import time
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()

try:
    print(ctime())
    driver.find_element_by_id("kw")
    print(ctime())
    driver.find_element_by_id("kw1")

except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())
    driver.quit()

打印结果

Sat Sep 12 21:56:15 2020
Sat Sep 12 21:56:15 2020
Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“kw1”]"}
(Session info: chrome=84.0.4147.125)
Sat Sep 12 21:56:25 2020

  • 2.显式等待:
    显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常TimeoutException。
    (1)显示等待需要用WebDriverWait 累来构建对象,并传入driver,然后调用until()方法。
    (2)像util() 中传入 expected_conditions.percence_of_element_located()
    (3)注意事项:excepted_conditions.percence_of_element_located()的参数是元组,少写括号是会报错的。

示例代码;

from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()

element = WebDriverWait(driver,10,0.5).until(
    #此处注意,参数传的是元组,少括号是执行不了的
    expected_conditions.presence_of_element_located((By.ID,'kw'))
)
element.send_keys("selenium\n")
time.sleep(3)
driver.quit()

五、浏览器控制

  • 浏览器大小控制
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
#最大化
driver.maximize_window()
time.sleep(2)
#最小化
driver.minimize_window()
time.sleep(2)
#指定大小
driver.set_window_size(100,100)
time.sleep(2)
driver.quit()

  • 刷新、后退、前进
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://news.baidu.com")
time.sleep(2)
driver.get('https://www.baidu.com')
#后退
driver.back()
time.sleep(2)
#前进
driver.forward()
time.sleep(2)
#刷新
driver.refresh()
time.sleep(2)
driver.quit()
  • 常用的几个方法

clear(): 清除文本。
send_keys (value): 模拟按键输入(被操作元素需要是个 input 标签)。
click(): 单击元素
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 检测该元素是否用户可见
submit()方法用于提交表单。

六、窗口截图

两种截图方式:
1.全屏截图:driver.get_screenshot_as_file(fileroot)
注意 :文件名必须是png格式的图片格式
2.元素截图:element.screenshot()

from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.maximize_window()

element = driver.find_element_by_id('kw')
element.send_keys('selenium')
driver.get_screenshot_as_file('.\\a.png')
element.screenshot('.\\b.png')
time.sleep(1)
driver.quit()

截图效果:
python——selenium总结_第1张图片在这里插入图片描述

七、 警告框处理

警告框处理简单来说有:
text:显示文本内容
accept() :通过
dismiss():拒绝
send_key():输入

八、鼠标事件

鼠标事件主要:
(1)需要ActionChains 类
(2)向ActionChains类注入 driver 调用方法方法中传参数element
(3)最后一定要调用perform()方法 否则不执行

单击:click(ele)
双击:double_click(ele)
拖拽:drag_and_drop(ele1,ele2)
右击:context_click(ele)

driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.maximize_window()

element = driver.find_element_by_id('kw')
element.send_keys('selenium')
ele = driver.find_element_by_id('su')

#单击
ActionChains(driver).click(ele).perform()
ele1 =driver.find_element_by_xpath('//*[@id="result_logo"]/img[1]')
#双击
ActionChains(driver).double_click(element).perform()
#右击
ActionChains(driver).context_click(element).perform()
#拖拽
ActionChains(driver).drag_and_drop(ele1,element).perform()
 

time.sleep(2)
driver.quit()

九、键盘事件

Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。

常用的键盘操作如下:

模拟键盘按键 说明
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(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…Fn) 键盘 F1…Fn

十、内嵌网页处理

你可能感兴趣的:(Python,selenium,python)