selenium基础命令

记录学习内容
学习命令顺序:文章Selenium Python 教程

元素定位

find_element_by_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()

这些属于老代码使用的,目前新版本使用方式为:

#注意一定要import By!!!不然用不了这个
from selenium.webdriver.common.by import By

find_element(By.ID, "loginName")
find_element(By.NAME, "SubjectName")
find_element(By.CLASS_NAME, "u-btn-levred")
find_element(By.TAG_NAME, "input")
find_element(By.LINK_TEXT, "退出")
find_element(By.PARTIAL_LINK_TEXT, "退")
find_element(By.XPATH, "//*[@id='Title']")
find_element(By.CSS_SELECTOR, "[type=submit]")

新版Selenium不适用老版代码的解决方法:
python+Selenium——解决find_element_by_*方法被弃用,appium调用webdriver模块库会直接报错

控制浏览器操作

  • 控制浏览器窗口大小(第一个数为宽,第二个数为高)
    driver.set_window_size(300, 600)

  • 浏览器后退,前进,刷新,关闭
    后退:driver.back()
    前进:driver.forward()
    刷新:driver.refresh()
    关闭当前页:driver.close()
    关闭所有页:driver.quit()

  • 获取页面信息——注意没有括号
    获取当前页面url:driver.current_url
    获取当前标题 :driver.title
    获取当前浏览器名称:driver.name
    获取当前页面源代码:driver.page_source

"""
控制浏览器
"""
#窗口大小,第一个数是宽,第二个数是高
driver.set_window_size(800, 1200)

#后退
driver.back()
#回到刚才回退的那个页面
driver.forward()
#刷新页面
driver.refresh()
#关闭当前页
driver.close()
#关闭所有页
driver.quit()

#获取页面信息——注意没有括号
#获取当前页面url
print(driver.current_url)
#获取当前标题
print(driver.title)
#获取当前浏览器名称
print(driver.name)
#获取当前页面源代码
print(driver.page_source)

Webelement常用方法

  • 点击和输入
    清除文本 :driver.find_element(By.ID, ‘kw’).clear()
    模拟按键输入 :driver.find_element(By.ID, ‘kw’).send_keys(“selenium”)
    单机元素:driver.find_element(By.ID, ‘su’).click()

  • 提交
    可以在搜索框模拟回车操作
    search_text = driver.find_element(By.ID, ‘kw’)
    search_text.send_keys(‘selenium’)
    search_text.submit()

"""
webElement操作
"""
#点击和输入
driver.find_element(By.ID, 'kw')
driver.find_element(By.ID, 'kw').send_keys("selenium")
driver.find_element(By.ID, 'su').click()
driver.find_element(By.ID, 'kw').clear()

#提交
search_text = driver.find_element(By.ID, 'kw')
search_text.send_keys("selenium")
search_text.submit()

键盘鼠标操作

参考:Selenium快速入门之2:ActionChains所有行为动作、常用JS操作
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
ActionChains 类提供了鼠标操作的常用方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常用键盘按键

from selenium.webdriver.common.keys import Keys

#删除键(BackSpace)
send_keys(Keys.BACK_SPACE) 
#空格键(Space)
send_keys(Keys.SPACE) 
#制表键(Tab)
send_keys(Keys.TAB) 
#回退键(Esc)
send_keys(Keys.ESCAPE)
#回车键(Enter)
send_keys(Keys.ENTER) 
#全选(Ctrl+A)
send_keys(Keys.CONTROL,'a')
#复制(Ctrl+C) 
send_keys(Keys.CONTROL,'c') 
#剪切(Ctrl+X)
send_keys(Keys.CONTROL,'x') 
#粘贴(Ctrl+V)
send_keys(Keys.CONTROL,'v') 
#键盘 F1
send_keys(Keys.F1) 

等待页面加载完成

显式等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 5, 0.5).until(
                      EC.presence_of_element_located((By.ID, "kw"))
                      )
element.send_keys('selenium')

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

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

driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明:
until(method, message=‘’): 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’) :调用该方法提供的驱动程序作为一个参数,直到返回值为False。

在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常。换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

driver.implicitly_wait(20)

在不同的窗口和框架之间移动

driver.switch_to_window(“windowName”)
driver.switch_to_frame(“frameName”)

以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

#先通过xpth定位到iframe
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
#再将定位对象传给switch_to_frame()方法
driver.switch_to_frame(xf)

一旦我们完成了frame中的工作,我们可以这样返回父frame:

driver.switch_to_default_content()

注:窗口是指同一个浏览器上方不同的窗口,当测试页面同时出现2个或者以上窗口时候,而且新打开的window没有或不清楚namem,可以使用driver.switch_to_window(handle)来进行切换

handles = driver.window_handles          #获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1])     #切换到最新打开的窗口
driver.switch_to.window(handles[-2])     #切换到倒数第二个打开的窗口
driver.switch_to.window(handles[0])      #切换到最开始打开的窗口

警告框

参考python中switch_to_alert的用法

#alert = driver.switch_to_alert()
#目前已经改版为
driver.switch_to.alert
  1. 警告类弹alert(),显示警告或其他信息,用于通知用户,下方只有一个【确认】按钮。
  2. 确认类弹窗confirm(),询问是否继续某种操作等功能,下方有【确认】和【取消】两种按钮。
  3. 消息类弹窗prompt(),需要输入一些信息,比如用户密码等,下方会有【确认】和【取消】按扭

然后使用 text/accept/dismiss/send_keys 按需进行操作

  • text:返回 alert/confirm/prompt 中的文字信息。
  • accept():接受现有警告框。
  • dismiss():解散现有警告框。
  • send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
driver.get("file:///D:/nginx/nginx-1.12.2/html/jsapi-dev/test.html")
driver.find_element(By.XPATH, '/html/body/input').click()
#接受弹窗
driver.switch_to.alert.accept()
#得到弹窗的文本消息,比如得到:请输入用户名!
message = driver.switch_to.alert.text
print(message)
#取消按钮
driver.switch_to.alert.dismiss()
#输入值
driver.switch_to.alert.send_keys("selenium")
driver.switch_to.alert.accept()

html文件是我自己写的,用vsCode运行即可,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js-test</title>
    <style>
        .myBtn {
            font-size: 16px;
            background-color: #0094ff;
            border: 0;
            text-align: center;
            padding: 0 10px;
            margin: 5px;
            min-width: 80px;
        }
    </style>
    <script type="text/javascript">
        function display_alert(){
            var name = prompt("I am a prompt box!!");
            if(prompt){
                document.write(name);
            }else{
                document.write("NULL");
            }
        }
    </script>
</head>
<body>
    <input type="button" onclick="display_alert()" value="Display alert box" />
</body>
</html>

下拉框选择

参考:selenium.下拉框操作(select_by)

from selenium.webdriver.support.select import Select

driver.get("file:///D:/nginx/nginx-1.12.2/html/jsapi-dev/test.html")
sel = driver.find_element(By.XPATH, "/html/body/select")
driver.implicitly_wait(10)

#以index属性值来查找匹配的元素并选择
Select(sel).select_by_index(1)
time.sleep(2)

#以value属性值来查找该option并选择
Select(sel).select_by_value('03')
time.sleep(2)

#以text文本值来查找匹配的元素并选择
Select(sel).select_by_visible_text("了却君王天下事,赢得生前身后名。")
time.sleep(2)

#选择第一个option 选项
Select(sel).first_selected_option()

注意,index是从0开始的,不是1
HTML文件:

<body>
    <select name="辛弃疾" id="">
        <option value="01">破阵子·为陈同甫赋壮词以寄之</option>
        <option value="02">醉里挑灯看剑,梦回吹角连营。</option>
        <option value="03">八百里分麾下炙,五十弦翻塞外声。沙场秋点兵。</option>
        <option value="04">马作的卢飞快,弓如霹雳弦惊。</option>
        <option value="05">了却君王天下事,赢得生前身后名。</option>
        <option value="06">可怜白发生!</option>
    </select>
</body>

文件上传

其实就是找到相关按钮,把文件路径输入到里面

#定位元素按钮,上传文件
driver.find_element(By.name, "file").send_keys('D://upload_file.txt')

操作cookie

参考:Python Selenium.WebDriver 对Cookies的处理及应用『模拟登录』

#获得所有cookie信息
get_cookies()
#返回字典的key为“name”的cookie信息
get_cookie(name)
#添加cookie。“cookie_dict”指字典对象,必须有name 和value 值
add_cookie(cookie_dict)
#删除cookie信息。“name”是要删除的cookie的名称;“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”,可不写
delete_cookie(name,optionsString)
#删除所有cookie信息
delete_all_cookies() 

#参考demo
"""
cookie
"""
#获得所有cookie信息
cookie = driver.get_cookies()
#返回字典的key为“name”的cookie信息
cookie = driver.get_cookie('ZFY')
print(cookie)
#添加cookie。“cookie_dict”指字典对象,必须有name 和value 值
cookie_dict = {
    "name": "Shay_cookie",
    "value": "This is a cookie"
}
driver.add_cookie(cookie_dict)
cookie = driver.get_cookie('Shay_cookie')
print(cookie)
#删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”
driver.delete_cookie('Shay_cookie')
cookie = driver.get_cookie('Shay_cookie')
print(cookie)
#删除所有cookie信息
driver.delete_all_cookies()

调用JavaScript代码

有些操作不能依靠WebDriver提供的API来实现,所以需要调用Javascript代码
参考文章:Selenium实战(二)——调用JavaScript之execute_script()方法

driver.execute_script(js)
  1. 浏览器滚动条的拖动

window.scrollTo()方法用于设置浏览器窗口滚动条的水平位置和垂直位置,第一个参数表示水平左边距,第二个参数表示垂直上边距。

js = "window.scrollTo(100,450);"
driver.execute_script(js)
  1. 处理HTML5视频播放

IE9+、Firefox、Opera、Chrome都支持HTML5定义的新元素,下面例子简单自动播放了一段<video>视频:

driver.get("http://videojs.com")
driver.implicitly_wait(10)
video = driver.find_element(By.ID, "preview-player_html5_api")
# 返回播放文件地址
url = driver.execute_script("return arguments[0].currentSrc;", video)
print(url)

窗口截图

#截取当前窗口,并指定截图图片的保存位置
driver.get_screenshot_as_file("D:\\baidu_img.jpg")
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值