selenium自动化基础知识点


目录

  • selenium自动化基础知识点
  • 一、Selenium是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.下载对应的浏览器驱动
    • 3.基本使用
  • 三、元素定位
    • 1、特点
    • 2、八大元素定位方法
    • 3、分类及使用【xpath】:
      • 1. 绝对路径定位
      • 2. 相对路径定位
        • 一、通过元素本身属性定位:
        • 二、通过关系定位(父级、兄弟级):
  • 四、Dom元素 and 窗口操作
    • 1.Dom元素操作:
    • 2.常用窗口操作:
  • 五、等待操作
    • 1.强制等待:
    • 2.隐式等待:
    • 3. 显示等待(等待[WebDriverWait]+条件[expected_conditions])
      • expected_conditions[EC]类其他常用方法 :
      • expected_conditions[EC]中不常用的条件方法:
  • 六、浏览器窗口切换操作
    • 切换窗口的两种方式:第一种:
    • 切换窗口的两种方式:第二种:
  • 七、iframe-即html嵌套iframe切换操作
  • 八、JS弹窗处理---- Alert弹窗
  • 九、下拉框选项处理
    • 1.经典select - option下拉框
    • 2.非select下拉框---例如:div+p
  • 十、鼠标操作
    • 1、操作示例
    • 2、鼠标操作方法合集
  • 十一、按键操作--Keys类
  • 十二、JS操作---JavaScript脚本操作页面元素
  • 十三、文件操作

一、Selenium是什么?

selenium是用来进行页面元素定位的第三方库,可使用xpath,元素数据,绝对相对路径进行元素定位及鼠标点击事件等等,用来进行web自动化测试的工具,可以直接运行在浏览器中,像用户自己手动点击操作一样

二、使用步骤

1.引入库

pip install selenium # 使用pip命令下载selenium第三方库from selenium import webdriver # 导入selenium库

2.下载对应的浏览器驱动

下载浏览器驱动时注意需要下载与浏览器对应的驱动版本,下载完成后将驱动放置python环境的安装路径下:C:\Users\Administrator\AppData\Local\Programs\Python\Python39

谷歌驱动下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/
火狐驱动下载地址:https://liushilive.github.io/github_selenium_drivers/md/Firefox.html

3.基本使用

from selenium import webdirverdriver = webdriver.Chrome() # 声明谷歌浏览器驱动
# 示例1:打开百度
driver.get("https://www.baidu.com")
# 示例2:获取当前窗口的title
print(dirver.title)
# 示例3:获取当前窗口的url
print(dirver.current_url)
# 示例4:最大化窗口
dirver.maximize_window()
#  示例5:刷新页面
dirver.refresh()
#  示例6:下一页,上一页
dirver.forward()  dirver.back()
# 示例7:关闭当前窗口/关闭浏览器
# 区别:当只有一个窗口时,关闭窗口,后台驱动也会关闭
dirver.close()/dirver.quit()

三、元素定位

1、特点

1、万能定位方式
2、支持文本内容进行定位
3、支持元素的多个属性进行定位
4、支持通过元素层级关系进行定位

2、八大元素定位方法

8大定位操作xmind笔记连接:https://hnqlpvx3ef.feishu.cn/mindnotes/bmncnZMK43mqhxFhwtWXQJs62Ig

 ID = "id"   # id属性XPATH = "xpath" # xpath定位LINK_TEXT = "link text" # a元素的文本内容PARTIAL_LINK_TEXT = "partial link text" # a元素包含的文本内容NAME = "name" #  name属性TAG_NAME = "tag name" # 标签名CLASS_NAME = "class name" # class属性CSS_SELECTOR = "css selector" # css选择器定位

3、分类及使用【xpath】:

1. 绝对路径定位

1.1、 F12中点击页面元素复制位置即可
1.2 、提现父子,兄弟关系
1.3、 过于依赖页面元素,不稳定【前端经常更改页面元素关系,绝对定位不能够稳定版本使用】

2. 相对路径定位

2.1、特点:   1、不考虑位置,不考虑层级2、在这个html页面找,只要表达式能匹配到就可以3、ctrl+f校验表达式是否正确

2.2 代码示例:

一、通过元素本身属性定位:


1、标签名定位:语法: //标签名2、标签名+单个属性语法://标签名[@属性名="属性值"]3、标签名+文本:语法://标签名[text(),"文本值"]4、标签名+contains()函数匹配部分属性值或文本内容定位语法://标签名[@属性名 或 text() = , "指定部分文本或属性值"]5、标签名+多个属性组合定位,可使用逻辑语句and or not语法://标签名[@属性名1 = "值1" and @属性名2 = "值2"]

二、通过关系定位(父级、兄弟级):

1、层级定位(通过区域内层级关系找到元素):语法://标签名1[@属性名1 = "值1"]/标签名2[@属性名2 = "值1"]2、轴定位(通过子孙元素查找父级、祖先级元素;通过兄弟元素查找指定元素):语法://标签名称[@属性名1 = "值1"]/轴名称::标签名称1[[@属性名2 = "值2"]//轴:在当前节点下所有子孙节点去找元素/轴:在当前之后的所有节点去找元素(递归所有兄弟节点)轴名称:ancestor:祖先节点包括父节点parent: 父节点following:当前节点【之后】的所有节点preceding:当前节点【之前】的所有节点following-sibling: 当前节点【之后】的所有兄弟节点preceding-sibling: 当前节点【之前】的所有兄弟节点

四、Dom元素 and 窗口操作

1.Dom元素操作:

元素状态
1、元素存在:页面存在  存在:在html当中,可以找到这个元素。 但它不一定可见。
2、元素可见:页面不可见  可见:元素在页面当中占据了一定的大小。高和宽>0
3、元素可用:按钮置灰(不可用)

元素操作链接地址:http://t.csdn.cn/Kgb0r

2.常用窗口操作:

项目 Value
maximize_window() 放大当前窗口,不需要传参
minimize_window() 最小化特定窗口
.back() 上一页
.forward() 下一页
.close() 关闭当前窗口
.quit() 推出驱动程序并关闭所有窗口
.switch_to.(…) 包含所有可切换焦点的对象,具体可切换对象如下:

element = driver.switch_to.active_element
alert = driver.switch_to.alert
driver.switch_to.default_content()
driver.switch_to.frame(‘frame_name’)
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name(“iframe”)[0])
driver.switch_to.parent_frame()
driver.switch_to.window(‘main’)

更多窗口操作详见:WebDriver类中查看

五、等待操作

1.强制等待:

# 强制等待就是使用time包中的sleep()函数让程序在调用到此方法时停止或睡眠暂停指定时间
import time# 单位:s
time.sleep(5)

2.隐式等待:

from selenium import webdriverdriver = webdriver.Chrome()
# 语法格式:{单位:s}
driver.implicitly_wait(5)
# 特点:
隐式等待整个会话只执行一次,后面每次元素查找都会进行等待操作,
在设置的时间内找到元素就进入下部代码操作,元素未找到就会报错;
# 缺点:
成效比较单一,无法适用于较复杂场景

3. 显示等待(等待[WebDriverWait]+条件[expected_conditions])

# WebDriverWait()参数说明
1.timeout:最长超时时间,默认以秒为单位
2.poll_frequency:轮询频率,检测的间隔步长,默认为0.5s,这里会每隔 0.5 秒调用一次 method 的临时函数
3.ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。# 显示调用需要和until()结合使用
# 公共部分:
# 导包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 写法一{分开编写}:
wait = WebDriverWait(driver=driver, timeout=10)  # 传入dirver 并设置超时时间为10s
element_loator = (By.XPATH, '//span[@id="kw"]')  # 使用元组方式存储元素查找方式及查找表达式
element = wait.until(EC.visibility_of_element_located(locator=element_locator))# 写法二{组合编写}:
element = WebDriverWait(driver=driver,timeout=10).until(EC.visibility_of_element_located(By.XPATH, '//span[@id="kw"]'))# visibility_of_element_located :条件为等待单个元素出现

expected_conditions[EC]类其他常用方法 :

条件 解释
visibility_of_element_located 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of_all_elements_located 判断多个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element即可
frame_to_be_available_and_switch_to_it 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
alert_is_present 判断页面上是否存在alert
element_to_be_selected 判断某个元素是否被选中了,一般用在下拉列表
element_to_be_clickable 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
presence_of_element_located 判断某个元素是否被加到了dom树里,【并不代表该元素一定可见】
presence_of_all_elements_located 等待所有元素存在dom树中【并不代表该元素一定可见】

expected_conditions[EC]中不常用的条件方法:

条件 解释
title_is 判断当前页面的title是否完全等于(==)预期字符串,返回是布尔值
title_contains 判断当前页面的title是否包含预期字符串,返回布尔值
text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断某个元素中的value属性是否包含了预期的字符串
invisibility_of_element_located 判断某个元素中是否不存在于dom树或不可见
staleness_of 等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

六、浏览器窗口切换操作

前言:为什么要做窗口的切换?
当对浏览器进行操作点击,或百度搜索时,会跳出新的窗口,而selenium代码层面并未切换到新的弹窗中,如果不做切换操作,则后续需要在新的弹窗中做元素定位等操作则无法定位获取。所以需要进行窗口切换的操作,转换到需要操作的新窗口,从而进行后续步骤。。。

切换窗口的两种方式:第一种:

步骤:
1.触发打开新窗口的操作
2.强制等待下 sleep(1) //一般情况下需要等待1-3秒
3.获取所有打开的窗口:driver.switch_to.window(win_handle_list [-1])
------获取到的数据为列表形式,一般新打开的窗口可以理解为追加到列表后
4. 切换到指定窗口
代码演示如下:

"""此处以百度点击搜索按钮后的浏览器状态为例:"""
# 导包
from selenium improt webdriver
from selenium.webdriuver.common.by import By
from selenium.webdriver.support.wait import webDriverWait # 导入等待和条件包ES
from selenium.webdriver.support import expected_conditions as ES"""前置"""
# 打开浏览器进入百度首页,最大化浏览器
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maxmize_window()
# 找到输入框"kw"输入查找内容并点击"su"搜索按钮,页面显示csdn官网
driver.find_element(By.id, "kw").sendkeys("csdn")
driver.find_element(By.id, "su").click()"""1.触发打开csdn官网新窗口操作"""
# 等待
webDriverWait(driver,10).unitl(EC.visibility_of_any_elements_located(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]'))
# 点击触发新窗口
driver.find_element(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]').click()
sleep(1)
"""2.获取所有打开的窗口,并切换到新窗口"""
win_handle_list = driver.window_handles # 获取所有窗口
driver.switch_to.window(win_handle_list [-1]) # 使用swich_to.window(win_handle_list [下标])切换窗口# 切换到新窗口后即可进入后续操作

切换窗口的两种方式:第二种:

显性等待当中有一个条件是关于新窗口的:EC.new_window_is_opened(参数【现在已有的窗口句柄列表】)
返回为Boolean类型,在触发新窗口后判断是否有新窗口有则返回True 否则返回False

步骤:
0.先获取已有的窗口句柄列表:win_list = driver.windows_handles
1.触发打开新窗口的操作
2.WebDriverWait(driver,10).unitl(EC.new_window_is_opened(win_lsit)) 等待条件判断是否有新窗口
3.获取所有打开的窗口:driver.switch_to.window(win_handle_list [-1])
------获取到的数据为列表形式,一般新打开的窗口可以理解为追加到列表后
4. 切换到指定窗口
代码演示如下:

"""前置---同上""""""0.获取已有的窗口句柄列表"""
win_list = dirver.window_handles"""1.触发打开csdn官网新窗口操作"""
# 等待
webDriverWait(driver,10).unitl(EC.visibility_of_any_elements_located(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]'))
# 点击触发新窗口
driver.find_element(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]').click()
sleep(1)"""2.webDriverWait判断是否有新窗口打开"""
# 返回True表示有新窗口打开
WebDriverWait(driver, 10).unitl(EC.new_window_is_opened(win_lsit))
"""3.获取所有打开的窗口,并切换到新窗口"""
win_handle_list = driver.window_handles # 获取所有窗口
driver.switch_to.window(win_handle_list [-1]) # 使用swich_to.window(win_handle_list [下标])切换窗口# 切换到新窗口后即可进入后续操作

七、iframe-即html嵌套iframe切换操作

前言:在页面中前端因为需要分模块设计前端切面展示,一般会使用到iframe来进行html标签嵌套设计,在使用元素定位时,如果要获取嵌套中的html下的标签是无法定位到的,需要切换到指定iframe嵌套标签下才能进行后续操作;如果不切换运行自动化代码会报错找不到标签

1.如何识别元素是否在iframe当中:浏览器使用F12查看即可,如下图:

例如QQ邮箱的登录首页,检查页面元素可发现,登录按钮的标签在iframe中嵌套

代码示例iframe切换操作:

"""
方法一:切换使用driver.switch_to.frame()方法来完成iframe切换操作,其中的参数表达有3中方式,具体如下:1. iframe的下标2. iframe的name属性值3. iframe的webelement对象【driver.find_element(By.XPATH,"表达式")】By.id/tagname/name 都可退出:1. driver.switch_to.defalut_content() :返回主页面,即浏览器最初打开的页面特殊:如果有iframe嵌套使用的话,则需要层级switch_to到需要操作的iframe中例如:iframeA当中,嵌套iframeB如果要切换到B,那就再driver.switch_to如果要从B回到A,driver.switch_to.parent_frame()方法二:使用等待+EC条件完成iframe切换等待时间内指定iframe加载出来则切换到指定iframeWebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(iframe的下标/iframe的name属性/iframe的WebElement对象[driver.find_elment(iframe的定位策略, 定位表达式)]    ))"""
# 示例:
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
"""方法一:"""
# name属性切换到指定iframe
driver.switch_to.frame("login_frame")# webelement对象切换到指定iframe
driver.swtich_to.frame(driver.find_element(By.NAME, "login_frame"))# 下标切换到指定的iframe【一般页面中不会有太多的iframe,所以也可以使用下标来进行切换】
driver.swtich_to.frame(1)"""方法二:"""
# 下标切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(1))
# webelement切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "login_frame")))
# name切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("login_frame"))

八、JS弹窗处理---- Alert弹窗

前言:为何要处理js弹窗?js弹窗出现后,页面将无法操作,只有点掉alert弹窗才能继续操作页面元素
JS弹窗示例:https://www.w3school.com.cn/js/js_popup.asp

  1. 对js弹窗处理有指定的处理类 Alert
  2. 在switch_to中也有对应的方法.alert其实现原理就是实例化Alert对象,所以直接引用alert也可进行操作
  3. 处理弹窗的3种方法:
    accept():确定
    dismiss():取消
    send_keys():输入内容

代码示例:

# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.alert import Alert# 以w3school中的alert弹窗为例
driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert")
driver.switch_to.frame("iframeResult")
sleep(0.5)
driver.find_element(By.XPATH, '//button[@text(), "试一试"]').click()# js弹窗跳出后实例化alert对象,并进行操作Alert(driver).accept()  # 点击弹窗的确认按钮
Alert(driver).dismiss()  # 点击弹窗的取消按钮
Alert(driver).send_keys("内容")  # 在弹窗中输入指定内容

九、下拉框选项处理

1.经典select - option下拉框

  1. 下拉框示例w3school:https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select
  2. 处理下拉框的类 :Select 【导包:from selenium.webdriver.support import Select】
  3. 选择下拉框中值的3种方式:
    select_by_value :option的value属性值
    select_by_index:option所处的下标,从0开始
    select_by_visible_text:option的文本内容
    代码示例:
"""此处以w3school中的下拉框为例:https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select"""
# 导包
from selenium import webdriver
from selenium.common.by import By
from selenium.webdriver.support import Select# 1.找到需要操作的select元素对象
driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select")
sel = driver.find_element(By.TAG_NAME, "select")# 2.实例化Select对象
s = Select(sel)# 3.选值
s.select_by_value("fiat") #option的value属性值
s.select_by_index(1)#option所处的下标,从0开始
s.select_by_visible_text("Audi")#option的文本内容

2.非select下拉框—例如:div+p

非select下拉框选择时,就按正常获取元素一步步操作,没有捷径,以百度首页中的高级搜索为例:

import time
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By"""
2、div+p标签
百度-高级搜索
1) 触发下拉列表出现
2)再在下拉列表当中选择
"""driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
wait = WebDriverWait(driver,15)# 右上角 - 设置元素 - 点击
driver.find_element_by_id("s-usersetting-top").click()
sleep(1)
# 在显示的下拉列表当中,选择高级搜索
loc = (By.XPATH, '//a[text()="高级搜索"]')# 如果元素可见了,返回元素对象。如果元素不可见,返回False
element = wait.until(EC.visibility_of_element_located(loc))
element.click()
sleep(1)# 1、触发下拉列表出现
loc = (By.XPATH, '//div[@class="c-select adv-ft-select"]')
element = wait.until(EC.visibility_of_element_located(loc))
element.click()
sleep(1)
# 2、选值
loc = (By.XPATH, '//p[text()="微软 Word (.doc)"]')
element = wait.until(EC.visibility_of_element_located(loc))
element.click()time.sleep(7)
driver.quit()

十、鼠标操作

1、操作示例

前言:使用selenium中的ActionChains类对鼠标进行点击,悬停,长按拖拽,释放等操作

1. 导包,下方两种方式均可:

from selenium.webdriver import ActionChains
from selenium.webdriver.common.action_chains import ActionChains
2. 使用方式:
ActionChains的执行原理,当调用ActionChains方法时,不会立即执行鼠标操作,而是将所有鼠标操作存在列表队列中,当调用perform()方法时,按照队列中的顺序依次调用执行鼠标操作方法
3.具体使用步骤及代码示例如下:

"""
具体使用步骤1.实例化ActionChains类:2.调用鼠标操作的方法3.最后执行鼠标操作方法:perform()下方代码以菜鸟教程中的jsDOM事件案例为例子:https://www.runoob.com/js/js-htmldom-events.html
"""
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.get("https://www.runoob.com/htmldom/htmldom-events.html")
driver.maximize_window()
wait = WebDriverWait(driver,15)
locator = (By.XPATH,"//div[text()="Mouse Over Me"]")
element = wait.unitl(EC.visibility_of_element_located(locator))# 1.实例化
actionc = ActionChains(element)
# 2.调用鼠标操作方法
actionc.move_to_element(element)
actionc.pause(1)
actionc.click(element)
# 3. 调用执行方法
actionc.perform()"""
还可以使用链式调用,也可以进行鼠标操作
ActionChains(element).move_to_element(element).pause(1).click(element).perform()
"""

2、鼠标操作方法合集

方法 注释 使用
click(on_element=None) 鼠标单击操作
click_and_hold(on_element=None) 点击鼠标左键,不松开
context_click(on_element=None) 点击鼠标右键
double_click(on_element=None) 双击鼠标左键
drag_and_drop(source, target) 拖拽到某个元素然后松开 socurce:被拖拽元素;target:目标元素
key_down(value, element=None) 按下某个键盘上的键 与Keys类结合使用
key_up(value, element=None) 松开某个键 与Keys类结合使用
move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标 两个参数分别代表x,y轴坐标
move_to_element(to_element) 鼠标移动到某个元素 参数为移动到的元素对象
move_to_element_with_offset(to_element, xoffset, yoffset) 在某个元素位置松开鼠标左键
release(on_element=None) 在某个元素位置松开鼠标左键
send_keys(*keys_to_send) 发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) 发送某个键到指定元素
perform() 执行链中的所有动作

以上为鼠标操作的一些方法,具体使用方法可参考本链接:https://www.cnblogs.com/lxbmaomao/p/10389786.html

十一、按键操作–Keys类

Keys类中包含了所有键盘操作,需要使用时,调用对应的变量名即可,使用前需要先进行导包:
from selenium.webdriver.common.keys import Keys

"""
以下为常用的Keys类中的按键,其他按键可在Keys类中查看调用方式send_keys(Keys.BACK_SPACE)     删除键BackSpace,每次删除1个字符send_keys(Keys.SPACE)          空格键Spacesend_keys(Keys.TAB)             制表键Tabsend_keys(Keys.ESPACE)            回退键Escsend_keys(Keys.ENTER)         回车键Entersend_keys(Keys.CONTROL,‘a’)     全选Ctrl+Asend_keys(Keys.CONTROL,‘c’)     复制CTRL+Csend_keys(Keys.CONTROL,‘x’)     剪切CTRL+Xsend_keys(Keys.CONTROL,‘v’)     粘贴Ctrl+Vsend_keys(Keys.F1)              键盘F1send_keys(Keys.F12)             键盘F12
"""# 代码示例:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 以百度搜索回车按键为例driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 找到百度输入框,输入需要查找的内容并点击Enter
driver.find_element(By.id,"kw").send_keys("搜索内容", Keys.ENTER)

十二、JS操作—JavaScript脚本操作页面元素

前言:为什么要使用JS操作页面元素?当使用webdriver的element对象无法操作页面元素时,也可以使用js来操作页面元素,webdriver中有一个方法可以用来执行js脚本语句:driver.execute_script(“js脚本,可写多个使用;隔开”)

  1. WebDriver提供了两个执行JS代码的方法:
    execute_script(script, *args)
    execute_async_script(script, *args)
    两个方法分别为同步执行和异步执行,参数:script表示需要执行的js脚本语言;*args表示需要传递给js的参数
  2. 注意传参使用方式
    当有参数需要传递给js脚本时,其中的JS书写方式略有不同,需要传参的地方使用arguments[下标]来表示参数
    传入参数类似于存储在列表中,按顺序下标进行传参提取
    例如:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
wait = WebDriverWait(driver,15)# 使用selenium找到的元素对象,传递给js代码
ele_input = driver.find_element_by_id("kw")
ele_button = driver.find_element_by_id("su")# js代码中使用arguments来接收参数。可以理解是个列表,通过下标取值。从0开始,根据参数的位置。
js_code = 'arguments[0].value = "搜索内容";' \'arguments[1].click()'driver.execute_script(js_code,ele_input,ele_button)

更多JS相关脚本操作页面元素可参考菜鸟教程-JavaScript操作:https://www.runoob.com/js/js-htmldom-events.html

十三、文件操作

  1. 前言:当有文件上传操作的页面时,需要将本地的文件传递给元素使用时就需要使用到文件操作;
  2. 导包:
  • pip install pywinauto【用于window】
    from pywinauto.keyboard import send_keys
  • pip install pyautogui【使用(跨平台、windows、linux、mac、文件路径不能有中文、不支持多文件上传)】
    import pyautogui
  • 注意:在上传文件时,必须等待文件弹出框出现才可进行选择文件上传操作
# 两种上传文件的使用方式
# 1. window
from pywinauto.keyboard import send_keys
# 例如百度首页中的摄像机元素,点击后需要上传图片,定位并点击到元素后弹出文件夹框
# 选择文件
send_keys("文件路径")
send_keys('{ENTER}') # 回车按钮# 2.使用pyautogui 通用文件上传包
import pyautogui
# 例如百度首页中的摄像机元素,点击后需要上传图片,定位并点击到元素后弹出文件夹框
# 选择文件上传
pyautogui.typewrite(r'D:\fk88.png') # 选择文件
pyautogui.press(keys='enter',presses=3) # 确认上传【参数:keys:按键;persses:重复按几次; interval=0.0:时间间隔(浮动,可选)】

Web自动化【selenium】基础知识相关推荐

  1. web 自动化测试 selenium基础到应用(目录)

    第一章   自动化测试前提及整体介绍 1-1功能测试和自动化测试的区别 1-2自动化测试流程有哪些 1-3自动化测试用例和手工用例的区别 1-4 自动化测试用例编写 1-5 selenium的优势以及 ...

  2. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作   1.1 用webdriver打开一个浏览器   1.2 最大化浏览器&关闭浏 ...

  3. Selenium基础知识 自动登录QQ空间

    Selenium基础知识 自动登录QQ空间 from selenium import webdriver import timedef auto_login():driver = webdriver. ...

  4. 好程序员web前端教程分享web前端入门基础知识

    好程序员web前端教程分享web前端入门基础知识,作为合格的Web前端工程师必须得掌握HTML.CSS和JavaScript.只懂其中一两个还不行,必须对这三门语言都要熟悉.下面我们一起来看一看吧! ...

  5. 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识

    一名合格的web前端工程师必须得掌握HTML.CSS和JavaScript. 只懂其中一个或两个还不行,你必须对这三门语言都很熟悉. 也不是说必须对这三门语言都非常精通,但你至少要能够运用它们完成大多 ...

  6. web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...

    Web前端是什么 前端的本质就是通过一定的程序代码来实现用户界面的ui 交互.可以认为用户在终端所看到的和所操作的都属于前端,也就是说分为渲染页面和处理用户操作两块. 前端开发是创建Web页面或app ...

  7. web前端开发基础知识_薪资30K+的web前端怎么做到的?

    好的web前端年薪会有多少?首先,我们要知道怎么才能成为一个所认为的"好的web前端",其次,自己能值多少价值? 用户体验为王,是互联网时代的座右铭.人们在享受互联网带来的便捷的同 ...

  8. Web自动化selenium技术快速实现爬虫

    selenium是大家众所周知的web自动化测试框架,主要用来完成web网站项目的自动化测试,但其实如果要实现一个web爬虫,去某些网站爬取数据,其实用selenium来实现也很方便. 比如,我们现在 ...

  9. 移动web开发入门—基础知识、自适应布局、调试

    之前没做过移动端web开发,最近接手的一个小项目是做微信公众号,需要考虑手机适配.UI给出的设计稿是一般是基于iphone手机做的(15年之后是基于ipone6),我们的UI是基于iphone6来做的 ...

  10. selenium基础知识大全(转)

    自动化测试基础 1.软件测试分类 根据项目流程:单元测试(编码).集成测试(设计).系统测试(需求).验收测试 根据代码是否可见:白盒测试.黑盒测试.灰盒测试 功能测试:逻辑功能测试.界面测试.易用性 ...

最新文章

  1. 人工智能军事对抗技术发展趋势
  2. PowerShell 学习笔记——运行命令
  3. 一条正确的Java职业生涯规划,顺利拿到offer
  4. You have not accepted the license agreements of the following SDK components
  5. 从pg_hba.conf文件谈谈postgresql的连接认证
  6. 《团队激励与沟通》第 8 讲——团队合作技巧 重点部分总结
  7. python36 mysql_python-day36(初识MySQL数据库)
  8. android程序表白,几条曲线构建Android表白程序
  9. 【转】QTableView 小结
  10. dup和dup2详解
  11. Nmap命令参数介绍
  12. 生信技能树 WES分析教程学习(1)conda安装软件,配置环境
  13. 广搜算法之翻转棋子游戏
  14. 集成运算放大器之微分电路搭建
  15. Java后台给PDF加水印并且合并多个PDF文件
  16. 小程序AppId-当前开发者未绑定此AppId,请到小程序管理后台操作后重试
  17. 我的编程之路点滴记录(二)
  18. 计算器程序java开方运算_模拟计算器java程序
  19. 16比9尺寸是多少厘米_16比9(16比9分辨率大全)
  20. Fluke 726 高精度多功能过程校准器具体参数

热门文章

  1. nodejs模块化设计知识点总结
  2. postman 技巧之2:环境变量Enviroment
  3. python 递归-递归可视化
  4. RTL8367s调试
  5. python代码:匿名函数lambda、列表解析list comps
  6. mysql8.0.30安装及数据导入
  7. “BiKi网格宝”——震荡行情收益利器
  8. 在Typora中永久插入图片
  9. 认识 AbortController控制器对象 及其应用
  10. MATLAB 可以做什么有趣的事