Python学习笔记12:selenium webdriver

Selenium 是Web自动化测试的一大利器,主要分为Webdriver和WebElement两大类

浏览器启动(以Chrome为例)

 
 
driver = webdriver.Chrome(executable_path='D:\\Python\\chromedriver.exe')

Webdriver类的属性和方法

属性:
1.driver.current_url:用于获得当前页面的URL
2.driver.title:用于获取当前页面的标题
3.driver.page_source:用于获取页面html源代码
4.driver.current_window_handle:用于获取当前窗口句柄
5.driver.window_handles:用于获取所有窗口句柄

方法:
1.driver.find_element*():定位元素
2.driver.get(url):浏览器加载url。实例:driver.get("http//:www.baidu.com")
3.driver.forward():浏览器向前(点击向前按钮)。
4.driver.back():浏览器向后(点击向后按钮)。
5.driver.refresh():浏览器刷新(点击刷新按钮)。
6.driver.close():关闭当前窗口,或最后打开的窗口。
7.driver.quit():关闭所有关联窗口,并且安全关闭session。
8.driver.maximize_window():最大化浏览器窗口。
9.driver.set_window_size(宽,高):设置浏览器窗口大小。
10.driver.get_window_size():获取当前窗口的长和宽。
11.driver.get_window_position():获取当前窗口坐标。
12.driver.get_screenshot_as_file(filename):截取当前窗口。实例:driver.get_screenshot_as_file('D:/selenium/image/baidu.jpg')
13.driver.implicitly_wait(秒):隐式等待,通过一定的时长等待页面上某一元素加载完成。若提前定位到元素,则继续执行。若超过时间未加载出,则抛出NoSuchElementException异常。实例:driver.implicitly_wait(10) #等待10秒
14.driver.switch_to_frame(id或name属性值):切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame()
15.driver.switch_to.parent_content():跳出当前一级表单。该方法默认对应于离它最近的switch_to.frame()方法。
16.driver.switch_to.default_content():跳回最外层的页面。
17.driver.switch_to_window(窗口句柄):切换到新窗口。
18.driver.switch_to_alert():警告框处理。处理JavaScript所生成的alert,confirm,prompt.
19.driver.switch_to.alert():警告框处理。
20.driver.execute_script(js):调用js。
21.driver.get_cookies():获取当前会话所有cookie信息。
22.driver.get_cookie(cookie_name):返回字典的key为“cookie_name”的cookie信息。实例driver.get_cookie("NET_SessionId")
23.driver.add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值。
24.driver.delete_cookie(name,optionsString):删除cookie信息。
25.driver.delete_all_cookies():删除所有cookie信息。

其中定位元素有如下方法

返回一个匹配元素, 即一个 WebElement 元素
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()
返回一个列表, 包含所有匹配的元素, 即一个 WebElement 列表
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()

find_elements_by_css_selector()

WebElement类的属性和方法

属性:

1.element.size:获取元素的尺寸。
2.element.text:获取元素的文本。
3.element.tag_name:获取标签名称


方法:

1.element.clear():清除文本。
2.element.send_keys(value):输入文字或键盘按键(需导入Keys模块)。
3.element.click():单击元素。
4.element.get_attribute(name):获得属性值
5.element.is_displayed():返回元素结果是否可见(True 或 False)
6.element.is_selected():返回元素结果是否被选中(True 或 False)
7.element.find_element*():定位元素,用于二次定位。


单选框复选框的操作

1、单选框元素属性type="radio",复选框元素属性type="checkbox",举例:

    <form>  
    <label value="radio">男</label>   
    <input name="sex" value="male" id="boy" type="radio"><br>  
    <label value="radio1">女</label>  
    <input name="sex" value="female" id="girl" type="radio">  
    </form>  
  <form>  
    <!-- <label for="c1">checkbox1</label> -->  
    <input id="c1" type="checkbox">selenium<br>  
    <!-- <label for="c2">checkbox2</label> -->  
    <input id="c2" type="checkbox">python<br>  
    <!-- <label for="c3">checkbox3</label> -->  
    <input id="c3" type="checkbox">appium<br>  
    
    <!-- <form>  

2、对单选框和复选框操作:定义->判断是否勾选->点击勾选



下拉列表的操作

1、下拉列表元素标签为<select>,有的样式虽然是下拉列表,但可能是通过<div>或者<span>实现的.

<select id="status" class="form-control valid" onchange="" name="status">
    <option value=""></option>
    <option value="0">未审核</option>
    <option value="1">初审通过</option>
    <option value="2">复审通过</option>
    <option value="3">审核不通过</option>
</select>

2、对下拉列表的操作:定位到select标签,然后通过select_by_index() 或者select_by_value()相应的选项。

from selenium.webdriver.support.select import Select

……
sel = driver.find_element_by_xpath("//select[@id='status']")
Select(sel).select_by_value('0')  #未审核
Select(sel).select_by_value('1')  #初审通过
Select(sel).select_by_value('2')  #复审通过
Select(sel).select_by_value('3')  #审核不通过

常用JS操作

调用方法:driver.execute_script(js),由于对JS不了解,罗列几个常用的操作

1、js来拖动滚动条

        js_="window.scrollTo(100,600);"
        driver.execute_script(js_)

2、js加弹出窗口提示信息

#弹出提示对话窗口,方便调试
driver.execute_script("alert('输入框标红了!')")
3、接受提示信息
#接受提示信息 
from selenium.webdriver.common.alert import Alert 
driver.switch_to_alert().accept()
#confirm 元素类
t=driver.switch_to_alert()
print (t.text)
t.accept()

 针对js  非div 元素的 alert 弹出事件 可以用:

from selenium.webdriver import ActionChains
alert = driver.switch_to_alert()
#模拟键盘Enter 键
ActionChains(driver).send_keys(Keys.ENTER).perform()
js="$('#SystemDate').val('2017-07-21');"  
driver.execute_script(js

4、用来选择日期控件,输入框

js="$('#SystemDate').val('2017-07-21');"  
driver.execute_script(js)

键盘和鼠标操作

参考:https://blog.csdn.net/zh175578809/article/details/76767748

在WebDriver中,提供了许多鼠标操作的方法,这些操作方法都封装在ActionChains类中,包括鼠标右击、双击、悬停和鼠标拖动等功能

ActionChains类提供的鼠标操作事件

  • context_click():点击鼠标右键

  • double_click():双击鼠标

  • drag_and_drop():拖动鼠标

  • move_to_element():鼠标悬停

鼠标悬停

页面上有些下拉菜单,在鼠标放到元素上以后,下面的菜单才会显示出来。下面的图片就是一个例子

这里写图片描述

百度首页上的设置项,下面的菜单默认不会显示,将鼠标停在上面后才会显示,这就是鼠标的悬停操作,菜单显示以后就可以对下面的项进行点击操作

进入搜索设置的代码

# -*- coding: utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)

settings = driver.find_element_by_link_text('设置')
webdriver.ActionChains(driver).move_to_element(settings).perform()

time.sleep(1)

settings_search = driver.find_element_by_class_name('setpref')
settings_search.click()

time.sleep(3)
driver.close()

打开页面后,根据链接的文本信息找到设置项,使用ActionChains的move_to_element()方法将鼠标悬停在设置上,然后找到搜索设置项

鼠标的右击、双击和拖动事件都是通过上述的方法调用,只要将方法替换一下就可以了。拖动事件需要传入两个参数,第一个参数是拖动的起点元素,第二个参数是终点元素

webdriver.ActionChains(driver).context_click("右击的元素定位").perform()  #右击事件
webdriver.ActionChains(driver).double_click("双击的元素定位").perform()  #双击事件
webdriver.ActionChains(driver).drag_and_drop("拖动的起点元素", "拖动的终点元素").perform()  #拖动事件

键盘事件

Keys类中提供了几乎所有的键盘事件,在鼠标事件中用到了两个键盘事件,键盘的向下按键(send_keys(Keys.DOWN))和键盘的回车事件(send_keys(Keys.ENTER))。键盘的事件需要导入Keys模块

from selenium.webdriver.common.keys import Keys

所有的键盘事件都包含在这个模块中,send_keys用来模拟键盘输入,除此之外,还可以用例模拟键盘上的按键,不仅支持单个的键盘按键,还支持组合按键输入

# -*- coding: utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)

driver.find_element_by_id('kw').send_keys('selenium')  #在搜索框中输入"selenium"
driver.find_element_by_id('kw').send_keys(Keys.SPACE)  #输入空格键
driver.find_element_by_id('kw').send_keys('python')  #在搜索框中输入"python"
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')  #输入Control+a模拟全选
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c')  #输入Control+c模拟复制
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')  #输入Control+v模拟粘贴
driver.find_element_by_id('kw').send_keys(Keys.ENTER)  #输入回车代替点击搜索按钮

time.sleep(3)
driver.close()

下面是一些常用的键盘事件:

– Keys.BACK_SPACE:回退键(BackSpace) 
– Keys.TAB:制表键(Tab) 
– Keys.ENTER:回车键(Enter) 
– Keys.SHIFT:大小写转换键(Shift) 
– Keys.CONTROL:Control键(Ctrl) 
– Keys.ALT:ALT键(Alt) 
– Keys.ESCAPE:返回键(Esc) 
– Keys.SPACE:空格键(Space) 
– Keys.PAGE_UP:翻页键上(Page Up) 
– Keys.PAGE_DOWN:翻页键下(Page Down) 
– Keys.END:行尾键(End) 
– Keys.HOME:行首键(Home) 
– Keys.LEFT:方向键左(Left) 
– Keys.UP:方向键上(Up) 
– Keys.RIGHT:方向键右(Right) 
– Keys.DOWN:方向键下(Down) 
– Keys.INSERT:插入键(Insert) 
– DELETE:删除键(Delete) 
– NUMPAD0 ~ NUMPAD9:数字键1-9 
– F1 ~ F12:F1 - F12键 
– (Keys.CONTROL, ‘a’):组合键Control+a,全选 
– (Keys.CONTROL, ‘c’):组合键Control+c,复制 
– (Keys.CONTROL, ‘x’):组合键Control+x,剪切 
– (Keys.CONTROL, ‘v’):组合键Control+v,粘贴


猜你喜欢

转载自blog.csdn.net/yaoliuwei1426/article/details/81043794
今日推荐