Python基础-自动化测试Seleium

Python基础-自动化测试Seleium,第1张

Python基础-自动化测试Seleium

首先要下载和谷歌对应版本的chromedriver.exe,放到python安装目录下

1.案例一

close:关闭单个页面
quit:关闭所有页面

利用谷歌浏览器打开百度,并输入文字点击确定然后退出浏览器

from selenium.webdriver.common.by import By

from selenium import webdriver
# 创建浏览器对象
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 输入文字
#driver.find_element_by_id("kw").send_keys("sele")   已经过时的方法
driver.find_element(By.ID,"kw").send_keys("sele")
# 点击百度一下按钮
#driver.find_element_by_id("su").click()  已经过时的方法
driver.find_element(By.ID,"su").click()
# 退出
driver.quit()
2.WebDriver 1.页面元素定位, *** 作
浏览器对象.find_element(By.NAME,"name属性值").方法
浏览器对象.find_element(By.ID,"id属性值").方法
浏览器对象.find_element(By.XPATH,"xpath").方法
浏览器对象.find_element(By.CLASS_NAME,"类名").方法
浏览器对象.find_element(By.TAG_NAME,"标签名 就是div啥的").方法
浏览器对象.find_element(By.link_TEXT,"显示文本").方法  就相当于是等于才可以被选住
浏览器对象.find_element(By.PARTIAL_link_TEXT,"部分显示文本").方法  相当于包含  有这个文字的就会识别
浏览器对象.find_element(By.CSS_SELECtOR,"层叠样式显示器").方法

css方式

from selenium.webdriver.common.by import By

from selenium import webdriver
import time
# 创建浏览器对象
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 输入文字
driver.find_element(By.CSS_SELECtOR,"span.bg>.s_ipt").send_keys("macbookpro")
time.sleep(2)
# 点击百度一下按钮
driver.find_element(By.ID,"su").click()
time.sleep(2)
# 退出
driver.quit()

  #通过css获取 By.CSS_SELECTOR
# 通过class获取  浏览器对象.find_element(By.CSS_SELECTOR,".s_ipt").方法
# 通过id获取     浏览器对象.driver.find_element(By.CSS_SELECTOR,"#kw").方法
# 后代选择器     浏览器对象.driver.find_element(By.CSS_SELECTOR,"span.bg>.s_ipt").方法
2.浏览器 *** 作
# 元素 *** 作
# 点击  click()
# 清除  clear   获取到的元素.clear()
# 追加  driver.find_element(By.CSS_SELECTOR,"span.bg>.s_ipt").send_keys("macbookpro") 就是再把上面的那行复制一下
# 覆盖  就是先clear清除 然后在把那句话重写一下换个内容
# 键盘输入  send_keys(value)
# current_url 获取当前url地址  断言的时候用
# title  返回当前页面title  也可以断言使用
# text 获取页面显示的文本  获取到元素直接.text
# get_attribute("name")  获取到元素.get_attribute("name") 拿到name  写class就是拿的class名字  value就是文本框里面的值
# is_displayed() 是否可见  结果即使真和假  获取到元素.is_displayed() 返回true或者false
# is_enabled()  展示是否可用
# is_selected()  展示是否选住 用于单选框
#设置浏览器窗口大小
driver.set_window_size(1080,600)
#最大化展示浏览器窗口
driver.maximize_window()
#最小化展示浏览器窗口
driver.minimize_window()
# 浏览器后退
driver.back()
# 前进
driver.forward()
# 刷新
driver.refresh()
# 截屏
driver.save_screenshot("png格式的图片 路劲")
# 这样写的好处就是分隔开 可以传参用
driver.get_screenshot_as_file("{}.{}".format("d:/aaa","png"))
3.鼠标,键盘 *** 作

用switch_to.window 方法 而switch_to_window方法已经不建议了
案例:打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
方式一:错误的方法

from selenium.webdriver.common.by import By

from selenium import webdriver
import time


# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
        # 句柄  driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
        # 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了  所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
time.sleep(4)
driver.find_element(By.link_TEXT,"聚划算").click()
# 查看句柄方法
driver1 = driver.current_window_handle
print(driver1)
time.sleep(5)
# 这里的By.link_TEXT 点击的是淘宝首页的女装而不是聚划算里面的女装 就是因为driver对象一样
driver.find_element(By.link_TEXT,"女装").click()
# 查看句柄方法
driver2 = driver.current_window_handle
print(driver2)
time.sleep(5)
#对比driver1和driver2两个句柄一样就知道一直是 *** 作的一个页面了,所以driver一直是 *** 作的一开始打开的页面,所以不会关闭女装页面,而是关闭淘宝页面
driver.back()
time.sleep(5)
driver.close()

方式二:

from selenium.webdriver.common.by import By

from selenium import webdriver
import time


# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
        # 句柄  driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
        # 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了  所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
driver.maximize_window()
time.sleep(4)
driver.find_element(By.link_TEXT,"天猫超市").click()
# 第一步:查看所有句柄方法
handles = driver.window_handles
print(handles[1])
# 第二步: 将聚划算句柄给driver 这样 *** 作的就是第二个页面的元素了
driver.switch_to.window(handles[1])

time.sleep(5)

driver.find_element(By.link_TEXT,"美容洗护").click()
time.sleep(5)
driver.back()
time.sleep(5)
driver.close()


#注意: 用switch_to.window 方法  而switch_to_window方法已经不建议了

方式三:在原来的driver对象打开的那个页面被关闭之后在 *** 作原来的也免得方法就是重新赋值

from selenium.webdriver.common.by import By

from selenium import webdriver
import time


# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
        # 句柄  driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
        # 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了  所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
driver.maximize_window()
time.sleep(3)
driver.find_element(By.link_TEXT,"天猫超市").click()
# 第一步:查看所有句柄方法
handles = driver.window_handles
print(handles[1])
# 第二步: 将聚划算句柄给driver 这样 *** 作的就是第二个页面的元素了
driver.switch_to.window(handles[1])

time.sleep(3)

driver.find_element(By.link_TEXT,"美容洗护").click()
time.sleep(3)
driver.back()
time.sleep(3)
driver.close()
# 关闭这个页面之后 就不能 *** 作原先点过来的页面了 因为页面已经关闭了    driver对象业就不存在了
# 想要 *** 作就要重新赋值
driver.switch_to.window(handles[0])
driver.find_element(By.link_TEXT,"天猫").click()
time.sleep(2)
driver.close()
driver.quit()

#########################################################
鼠标 *** 作

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time

# 鼠标 *** 作  常见方法  perform()执行所有ActionChains中存储的行为
# 1.context_click()
# 2.double_click()  双击
# 3. drag_and_drop()   拖动
# 4. move_to_element()  鼠标悬停


driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
time.sleep(2)
# 1.context_click()  右击    让鼠标放到设置上
setButton = driver.find_element(By.link_TEXT,"更多")
# 对 设置  按钮的 *** 作行为封装起来
# 鼠标放到那两个字上     悬浮
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(5)

# 在搜索框点击右键效果
setButton1 = driver.find_element(By.ID,"kw")
ActionChains(driver).context_click(setButton1).perform()
time.sleep(2)

driver.quit()

键盘 *** 作

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



# Send_keys(Keys.Back_SPACE):删除键
# Send_keys(Keys.SPACE):空格键
# Send_keys(Keys.TAB):制表键
# Send_keys(Keys.ESCAPE): esc键
# Send_keys(Keys.ENTER):回车健
# Send_keys(Keys.CONTROL,'a'):全选
# Send_keys(Keys.CONTROL,'c'):复制
# Send_keys(Keys.CONTROL,'x'):剪切
# Send_keys(Keys.CONTROL,'v'):粘贴

# 键盘事件案例:
# 1、百度"seleniumm”2、删除多输入的m
# 3、再输入“空格教程T
# 4、ctrl+a,全选文本框内容5、 ctrl+x,剪切选择的内容6、ctrl+v,粘贴复制的内容7、回车代替单击,完成搜索8、退出浏览器

driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
time.sleep(2)

# 1、百度"seleniumm
driver.find_element(By.ID,"kw").send_keys("seleniumm")
time.sleep(2)
# 2、删除多输入的m  默认就是键盘的删除键 就是从后往前删除一下
driver.find_element(By.ID,"kw").send_keys(Keys.BACK_SPACE)
time.sleep(2)
# 3、再输入“空格教程T  得先清除在添加 要不就会追加内容可
driver.find_element(By.ID,"kw").clear()
driver.find_element(By.ID,"kw").send_keys("空格教程T")
time.sleep(2)
# 4、ctrl+a,全选文本框内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'a')
time.sleep(2)
# 5、 ctrl+x,剪切选择的内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'x')
time.sleep(2)
# 6、ctrl+v,粘贴复制的内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'v')
time.sleep(2)
# 7、回车代替单击,完成搜索
driver.find_element(By.ID,"kw").send_keys(Keys.ENTER)
time.sleep(2)
# 8、退出浏览器
driver.quit()
4.警告窗口处理
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time

# 警告框 driver不能控制alert这种d出来的框的元素
# driver.switch_to.alert  先把控制权交给alert
# text:训回(获取)alert / /confirm/i/ prompt中的文字信息。accept():接受现有警告框。
# dismiss():放弃现有警告框。
# send_keys( keysTosend):发送文本至警告框。

driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
time.sleep(1)

driver.maximize_window()
setButton = driver.find_element(By.ID,"s-usersetting-top")
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(1)
driver.find_element(By.link_TEXT,"搜索设置").click()
time.sleep(1)

# 点击全部语言
driver.find_element(By.XPATH,'//*[@id="SL_0"]').click()
time.sleep(1)
driver.find_element(By.link_TEXT,"保存设置").click()
time.sleep(2)
# 接下来d出来一个alert的那个框  对他进行 *** 作
dd = driver.switch_to.alert

# 获取文本信息
tt = dd.text
print(tt)
time.sleep(2)
# 接受  就是点确定
dd.accept()
time.sleep(2)


driver.quit()
5.多窗口,多表单处理

多窗口处理

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

# iframe 由外层转为内层的方法
# 打开qq页面,登录qq邮箱

driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
time.sleep(1)

driver.maximize_window()
setButton = driver.find_element(By.link_TEXT,"登录")
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(2)

driver.find_element(By.CSS_SELECtOR,".sel").click()
time.sleep(1)
driver.find_element(By.link_TEXT,"登录").click()
time.sleep(1)

# 切换到iframe内置页面  第一种方法 直接输入父级ifrane的name属性值
#driver.switch_to.frame("ptlogin_iframe")

# 第二中方法  给对象
ifnameObj = driver.find_element(By.XPATH,'//*[@id="ptlogin_iframe"]')
driver.switch_to.frame(ifnameObj)

driver.find_element(By.ID,"switcher_plogin").click()
time.sleep(1)
driver.find_element(By.ID,"u").send_keys("854639450")
driver.find_element(By.ID,"p").send_keys("gy13933767394")
driver.find_element(By.ID,"login_button").click()
time.sleep(1)
driver.quit()

6.设置元素等待

强制>隐式>显示
元素等待

# 强制等待  休眠  time.sleep   让线程休眠
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
time.sleep(1)
driver.quit()

# 隐式等待 全局生效 如果给一个数字10  name这个元素需要1秒加载出来就加载1秒 剩下9秒就不会加载了  超时就会抛出异常
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
driver.implicitly_wait(10)
driver.quit()

# 显式等待  就是明确的等待,等待元素出现才会去 *** 作,要不然就一直等,等出去就超时  这是某个元素  上一个是全局
# 等百度一下的按钮出来
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
# 需要导包
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# WebDriverWait(driver,5,0.5) 三个属性含义   绑定对象  超时  频率
# until 加条件  直到.....才.....  传递一个方法  判断方法是否达到  先定位到某一个元素
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,"kw"))
if element:
    element.send_keys("输入")
else:
    element.send_keys("不对")
    
driver.quit()

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5700726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存