IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 【python】Selenium with Python3使用总结(二) -> 正文阅读

[开发测试]【python】Selenium with Python3使用总结(二)

一、查找元素

前提:首先需要先引入

from selenium import webdriver
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]”)

1.1、通过ID查找元素

如果找不到任何元素,会抛出 NoSuchElementException 异常

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
  </form>
 </body>
<html>

可以这样查找表单(form)元素:

login_form = driver.find_element(By.ID,”loginForm”)

1.2、通过Name查找元素

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

name属性为 username 的元素可以像下面这样查找:

username = driver.find_element(By.NAME,”username ”)

1.3、通过XPath查找元素

使用XPath的主要原因之一就是当你想获取一个既没有id属性也没有name属性的元素时, 可以通过XPath使用元素的绝对位置来获取(这是不推荐的),或相对于有一个id或name属性的元素 (理论上的父元素)的来获取你想要的元素。XPath定位器也可以通过非id和name属性查找元素。

绝对的XPath是所有元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就导致你的定位失败。 但是通过就近的包含id或者name属性的元素出发定位你的元素,这样相对关系就很靠谱, 因为这种位置关系很少改变,所以增强测试的健壮性。

举例:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

可以这样查找表单(form)元素:

#绝对定位 (页面结构轻微调整就会被破坏)
login_form = driver.find_element(By.XPATH, "/html/body/form[1]")

#HTML页面中的第一个form元素
login_form = driver.find_element(By.XPATH, "//form[1]")

#包含 id 属性并且其值为 loginForm 的form元素
login_form = driver.find_element(By.XPATH, "//form[@id='loginForm']")

username元素可以如下获取:

#第一个form元素中包含name属性并且其值为 username 的input元素
username = driver.find_element(By.XPATH, "//form[input/@name='username']")

#id为 loginForm 的form元素的第一个input子元素
username = driver.find_element(By.XPATH,"//form[@id='loginForm']/input[1]")

#第一个name属性为 username 的input元素
username = driver.find_element(By.XPATH,"//input[@name='username']")

“Clear” 按钮可以如下获取:

clear_button = driver.find_element(By.XPATH,"//input[@name='continue'][@type='button']")
clear_button = driver.find_element(By.XPATH,"//form[@id='loginForm']/input[4]")

1.4、通过链接文本获取超链接

示例:

<html>
 <body>
  <p>Are you sure you want to do this?</p>
  <a href="continue.html">Continue</a>
  <a href="cancel.html">Cancel</a>
</body>
<html>

continue.html 超链接可以被这样查找到:

continue_link = driver.find_element(By.LINK_TEXT,”Continue”)

1.5、通过标签名查找元素

示例:

<html>
 <body>
  <h1>Welcome</h1>
  <p>Site content goes here.</p>
</body>
<html>

h1 元素可以如下查找:

heading1 = driver.find_element(By.TAG_NAME,”h1”)

1.6、通过Class name 定位元素

示例:

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>

p 元素可以如下查找:

content = driver.find_element(By.CLASS_NAME,”content”)

1.7、通过CSS选择器查找元素

示例:

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>

p 元素可以如下查找:

content = driver.find_element(By.CSS_SELECTOR,'p.content')

二、等待页面加载完成

显式等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()

2.1、显式等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

2.2、隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element(By.ID,"myDynamicElement")

三、常用的操作

funcValue
get(url)打开网页
send_keys(str)输入
click()点击
clear()清空
text获取标签文本内容
get_attribute(‘属性’)获取元素属性值
close()关闭当前标签页
quit()关闭浏览器,释放进程

四、窗口切换操作

handle1 = driver.current_window_handle #获取当前窗口句柄
handles = driver.window_handles #获取所有窗口句柄
driver.switch_to.window(handles[0]) #切换到第一个窗口的句柄
driver.switch_to.window(handles[-1]) #切换到最新窗口的句柄

五、鼠标操作

actionchain是一种自动化低级交互的方法,例如鼠标移动、鼠标按钮操作、键按和上下文菜单交互。这对于执行更复杂的操作,如悬停和拖放非常有用。

方法描述
def click(self, on_element=None)鼠标左键单击
def click_and_hold(self, on_element=None)鼠标左键按键,不释放
def context_click(self, on_element=None)鼠标右击
def double_click(self, on_element=None)鼠标左键双击
def drag_and_drop(self, source, target)鼠标拖曳动作,将指定元素位置拖曳到目标元素位置,来移动元素
def drag_and_drop_by_offset(self, source, xoffset, yoffset)鼠标拖曳动作,将指定元素按沿x、y方向拖曳指定距离来移动元素
def move_by_offset(self, xoffset, yoffset)将鼠标光标沿x、y方向移动指定距离,来实现鼠标的移动
def move_to_element(self, to_element)将鼠标光标移动到指定的元素上
def move_to_element_with_offset(self, to_element, xoffset, yoffset)将鼠标光标移动到指定的元素相对元素左上角位置偏移(xoffset、yoffset)的位置
def release(self, on_element=None)释放鼠标,与click_and_hold函数配对使用
def key_down(self, value, element=None)按下指定的键盘按键
def key_up(self, value, element=None)释放已按下的键盘按键(与key_down配套使用)
def send_keys(self, *keys_to_send)键盘输入
def send_keys_to_element(self, element, *keys_to_send)给指定元素(可输入元素)进行键盘输入
def perform(self)执行所有存储的动作
def reset_actions(self)清空所有存储的动作
def pause(self, seconds)在指定的时间内暂定所有的输入

六、特殊字符键入

Set of special keys codes.

    NULL = u'\ue000'
    CANCEL = u'\ue001'  # ^break
    HELP = u'\ue002'
    BACKSPACE = u'\ue003'
    BACK_SPACE = BACKSPACE
    TAB = u'\ue004'
    CLEAR = u'\ue005'
    RETURN = u'\ue006'
    ENTER = u'\ue007'
    SHIFT = u'\ue008'
    LEFT_SHIFT = SHIFT
    CONTROL = u'\ue009'
    LEFT_CONTROL = CONTROL
    ALT = u'\ue00a'
    LEFT_ALT = ALT
    PAUSE = u'\ue00b'
    ESCAPE = u'\ue00c'
    SPACE = u'\ue00d'
    PAGE_UP = u'\ue00e'
    PAGE_DOWN = u'\ue00f'
    END = u'\ue010'
    HOME = u'\ue011'
    LEFT = u'\ue012'
    ARROW_LEFT = LEFT
    UP = u'\ue013'
    ARROW_UP = UP
    RIGHT = u'\ue014'
    ARROW_RIGHT = RIGHT
    DOWN = u'\ue015'
    ARROW_DOWN = DOWN
    INSERT = u'\ue016'
    DELETE = u'\ue017'
    SEMICOLON = u'\ue018'
    EQUALS = u'\ue019'

    NUMPAD0 = u'\ue01a'  # number pad keys
    NUMPAD1 = u'\ue01b'
    NUMPAD2 = u'\ue01c'
    NUMPAD3 = u'\ue01d'
    NUMPAD4 = u'\ue01e'
    NUMPAD5 = u'\ue01f'
    NUMPAD6 = u'\ue020'
    NUMPAD7 = u'\ue021'
    NUMPAD8 = u'\ue022'
    NUMPAD9 = u'\ue023'
    MULTIPLY = u'\ue024'
    ADD = u'\ue025'
    SEPARATOR = u'\ue026'
    SUBTRACT = u'\ue027'
    DECIMAL = u'\ue028'
    DIVIDE = u'\ue029'

    F1 = u'\ue031'  # function  keys
    F2 = u'\ue032'
    F3 = u'\ue033'
    F4 = u'\ue034'
    F5 = u'\ue035'
    F6 = u'\ue036'
    F7 = u'\ue037'
    F8 = u'\ue038'
    F9 = u'\ue039'
    F10 = u'\ue03a'
    F11 = u'\ue03b'
    F12 = u'\ue03c'

    META = u'\ue03d'
    COMMAND = u'\ue03d'

用法举例:

search = driver.find_element(By.ID, "toolbar-search-input")
search.send_keys("python selenium")
search.send_keys(Keys.ENTER)  #键盘操作,回车

search.send_keys(Keys.CONTROL,'c')   #复制(Ctrl+C)

七、find_element_by和find_element区别

selenium的find_element_by_*目前大部分是使用find_element(**)

八、查看API的详细封装

找到python的安装位置,这里以windows为例
开始–》python3.7–>在IDE上右击–》打开文件位置
然后进入\Lib\site-packages\selenium\

我这里是安装的C盘
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\selenium
在这里插入图片描述

九、示例(在csdn中搜索python selenium)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.implicitly_wait(15)
start_time = time.time()
driver.get("https://blog.csdn.net/")
handle1 = driver.current_window_handle #获取当前窗口句柄
#driver.maximize_window() #最大化窗口

search = driver.find_element(By.ID, "toolbar-search-input")
search.send_keys("python selenium")
search.send_keys(Keys.ENTER) 
#第二种方式
#search = driver.find_element(By.ID, "toolbar-search-button").click()

handle2 = driver.current_window_handle #获取当前窗口句柄

handles = driver.window_handles #获取所有窗口句柄
driver.switch_to.window(handles[0]) #切换到第一个窗口的句柄
time.sleep(2)
driver.switch_to.window(handles[-1]) #切换到最新窗口的句柄
time.sleep(2)

#点击最新按钮排序
search = driver.find_element(By.CLASS_NAME, "new").click()
end_time = time.time()
print("time cost: ",end_time-start_time)
time.sleep(20)
driver.quit()
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:47:46  更:2022-04-09 18:48:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:33:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码