selenium python学习笔记

题外话
环境变量(Win10):计算机——系统属性——相关设置/系统信息
%PATH%:由一系列的分号分隔的路径组成,用于脚本解析或者命令行在执行命令时,查找匹配的可执行文件或者脚本。路径为绝对路径,对于路径中包含的子路径不会进行递归查找。
path环境变量。path就是环境变量中的一个个路径,当我们在命令行中输入一个命令(或访问一个文件时),系统会首先在当前目录寻找,找到直接执行或打开;找不到会在path环境变量的路径去寻找,直到找到为主;如果path的路径都找不到,就会报错。
‘xxx’不是内部或者外部命令,也不是可运行的程序或批处理文件。
我们可以将一些经常需要访问的文件的路径。添加到path环境变量中,这样我们就可以在任意位置访问到这些文件。

1、 准备工作
安装:pip install selenium(需要注意你python解释器环境)

下载浏览器驱动
(需要注意的是:(1)需要将下载的驱动放在python.exe同样的路径之中,即project interpreter同样的目录下面;(2)下载驱动的时候要注意与浏览器版本一致,要不然在webdriver.Chrome()的时候出现的页面会显示data;这种)
地址参考

2、 笔记
元素定位
(个人建议自己从开发者工具中寻找元素的id等这种,网上很多教程的id是当时作者写教程的时候网页上的与目前最新的版本不一致)
find_element_by_id():可以自己从开发者工具中查找id名称
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()

定位元素之后,需要对元素进行操作,或单击或输入:
clear():清除文本
send_keys(value):模拟按键输入
click():单击元素
submit():提交表单,但是应用范围没有click()广泛
size:返回元素的尺寸
text:获取元素的文本
get_attribute(name):获得属性值
is_displayed():设置元素是否用户可见

鼠标事件ActionChains类
perform():执行所有ActionChains中存储的行为
context_click():右击
doble_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停

键盘事件
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) 键盘 F1
send_keys(Keys.F12) 键盘 F12

获取断言信息

title:获取当前页面的标题

current_url:获取当前页面的URL

text:获取搜索条目的文本信息

from selenium import  webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
#######
driver = webdriver.Chrome()
url01 = "https://www.baidu.com"
driver.get(url01)
print("设置浏览器宽为480,高为800")
driver.set_window_size(480,800)
# 定位到要悬停的元素
above = driver.find_element_by_link_text("贴吧")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
#定位元素之后对元素进行操作
driver.find_element_by_id("kw").clear()
time.sleep(3)
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
driver.find_element_by_id("su").click()
# 获得输入框的尺寸
size = driver.find_element_by_id('kw').size
print(size)
# 返回百度页面底部右备案信息
text = driver.find_element_by_id("s-bottom-layer-right").text
print(text)
# 返回元素的属性值, 可以是 id、 name、 type 或其他任意属性
attribute = driver.find_element_by_id("kw").get_attribute('type')
print(attribute)
# 返回元素的结果是否可见, 返回结果为 True 或 False
result = driver.find_element_by_id("kw").is_displayed()
print(result)
# {'height': 44, 'width': 548}
# ©2020 Baidu (京)-经营性-2017-0020
# text
# True
#获取断言信息
print("当前页面title",driver.title)
print("当前页面url",driver.current_url)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(1)
print('After search================')
# 再次打印当前页面title
title = driver.title
print(title)
# 打印当前页面URL
now_url = driver.current_url
print(now_url)
# 获取结果数目
user = driver.find_element_by_class_name('nums').text
print(user)
# 当前页面title 百度一下,你就知道
# 当前页面url https://www.baidu.com/
# After search================
# selenium_百度搜索
# https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=selenium&fenlei=256&rsv_pq=d10a119a00002895&rsv_t=c5b3cMYPdKIHdgPSSDPDK3w1C8ceGaCII44l7i%2Bj7JriulwzkusnhZpQQ9c&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=8&rsv_sug1=1&rsv_sug7=100&rsv_btype=i&inputT=209&rsv_sug4=209
# 搜索工具
# 百度为您找到相关结果约61,200,000个
#显示等待
element = WebDriverWait(driver, 5, 0.5).until(
                      EC.presence_of_element_located((By.ID, "kw"))
                      )
element.send_keys('selenium')
# 设置隐式等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
try:
    print(time.ctime())
    driver.find_element_by_id("kw22").send_keys('selenium')
except NoSuchElementException as e:
    print(e)
finally:
    print(time.ctime())
# Thu Jul 16 16:38:34 2020
# Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw22"]"}
#   (Session info: chrome=84.0.4147.89)
# Thu Jul 16 16:38:44 2020

driver = webdriver.Chrome()
url01 = "http://www.126.com"
driver.get(url01)

##多表单切换
# xf = driver.find_element_by_xpath(r'//*[@id="x-URS-iframe"]')
# driver.switch_to.frame(xf)
#由于每次frame都是变化的,所以直接使用下面语句进行定位iframe表单
xf = driver.find_element_by_tag_name("iframe")
driver.switch_to_frame(xf)
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()
##
#多窗口切换
driver = webdriver.Chrome()
#隐式等待,等待页面加载
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

# 获得百度搜索窗口句柄
sreach_windows = driver.current_window_handle

driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text("立即注册").click()

# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles

# 进入注册窗口
for handle in all_handles:
    # print(handle)
    if handle != sreach_windows:
        driver.switch_to.window(handle)
        print('now register window!')
        driver.find_element_by_name("userName").send_keys('username')
        driver.find_element_by_name('phone').send_keys('phone')
        time.sleep(2)
        # ……
driver.quit()

注:未学习完成,预计这周补充完成

参考文献:

selenium python教程
测试学习

你可能感兴趣的:(软件测试工具,selenium,软件测试)