selenium(3)

鼠标事件

2. 右键 .context_click(元素).perform()

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
#鼠标时间进行实列化
a=ActionChains(driver=driver)
#id定位百度搜索框
so=driver.find_element(By.ID,"kw")
t.sleep(2)
# 对百度搜索框右键操作
a.context_click(on_element=so).perform()
t.sleep(2)
driver.quit()

 

 

 

3. 双击

.double_click(元素).perform()

比如付款时的立即支付按钮,双击两次会不会出现两份账单。

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
#鼠标时间进行实列化
a=ActionChains(driver=driver)
# 在搜索栏输入内容
so=driver.find_element(By.ID,"kw").send_keys("yvonne")
# 定位到百度一下
su=driver.find_element(By.ID,"su")
t.sleep(2)
# 双击百度
a.double_click(on_element=so).perform()
t.sleep(2)
driver.quit()

 

 

 

4. 截图 driver.get_screenshot_as_file

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
# 在搜索栏输入内容
driver.find_element(By.ID,"kw").send_keys("yvonne")
# 定位到百度一下
driver.find_element(By.ID,"su").click()
t.sleep(2)
# 截图
driver.get_screenshot_as_file("baidu.png")
driver.quit()

 

 

 

一、键盘事件 keys

元素.send_keys(Keys.CONTROL,"a") 全选

元素.send_keys(Keys.CONTROL,"c") 复制

元素.send_keys(Keys.CONTROL,"v") 黏贴

元素.send_keys(Keys.BACKSPACE) 删除

把输入框定义为一个变量so,然后使用 so.send_keys(Keys.CONTROL,"a")

from selenium.webdriver.common.keys import Keys (先导入Keys)
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
# 在输入框里定义一个变量 并用元素id定位
so=driver.find_element(By.ID,"kw")
# 百度搜索关键字
so.send_keys("yvonne")
t.sleep(2)
# 全选
so.send_keys(Keys.CONTROL,"a")
t.sleep(2)
# 复制
so.send_keys(Keys.CONTROL,"c")
t.sleep(2)
# 删除
so.send_keys(Keys.BACKSPACE)
t.sleep(2)
# 黏贴
so.send_keys(Keys.CONTROL,"v")
t.sleep(2)
driver.quit()

 

 

 

二、等待

在UI自动化测试中,关于等待的部分,主要汇总如下三点:

1、固定等待,使用t.sleep()方法

2、隐式等待,使用implicitly_wait的方法,理解为设置最长等待时间

3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,如果判断失败,就会报TimeOutExpection的异常信息。

1. 固定等待

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://file.qq.com/")
# 进入到第一个frame1 如账号输入等 只获取frame的id
driver.switch_to.frame("login_frame1")
t.sleep(2)
# 进入到第er个frame1 如密码等 只获取frame的id
driver.switch_to.frame("ptlogin_iframe")
t.sleep(2)
# 定位密码登录并点击
driver.find_element(By.ID,"switcher_plogin").click()
t.sleep(2)
driver.quit()

 

  

 实战:获取腾讯邮箱账户密码的提示信息

先导入:
from selenium.webdriver.common.action_chains import ActionChains

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://file.qq.com/")
# 要定位的元素属性的对象
action=ActionChains(driver=driver)
t.sleep(3)
# 进入到第一个frame1 如账号输入等 只获取frame的id
driver.switch_to.frame("login_frame1")
t.sleep(2)
# 进入到第二个frame1 如密码等 只获取frame的id
driver.switch_to.frame("ptlogin_iframe")
t.sleep(2)
# 定位密码登录并登录
driver.find_element(By.ID,"switcher_plogin").click()
# 定义一个变量,定位到"支持QQ号/邮箱/手机号登录"的id
a=driver.find_element(By.ID,"uin_tips")
print(a.text)
# 断言 验证
assert a.text=="支持QQ号/邮箱/手机号登录"
# 定义一个变量,定位到"请输入密码"的id
a2=driver.find_element(By.ID,"pwd_tips")
print(a2.text)
# 断言 验证
assert a2.text=="请输入密码"
driver.quit()

 

 

 

2. 隐式等待

以秒为单位,表示我最多可以等待的时间是10秒,就不去刻意的等待一个准确的时间点了,程序在这个时间内都算正常运行,如果超过这个时间就报超时。

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.quit()

 

 

 

3. 显式等待
先导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as es

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://file.qq.com/")
# 以秒为单位, 表示最多可以等待30秒,超过这个时间就超时
driver.implicitly_wait(30)
driver.switch_to.frame("login_frame1")
t.sleep(2)
driver.switch_to.frame("ptlogin_iframe")
t.sleep(2)
# 点击登录
#wait=WebDriverWait(driver=driver,timeout=3).until(method=es.element_to_be_clickable((By.ID,"switcher_plogin"))) 简写
wait=WebDriverWait(
# 先实列化,timeout具体等待事件 until方法
driver=driver,timeout=10).until(
# element_to_be_clickable():元素可见时进行操作
method=es.element_to_be_clickable((
# By元组类型()
By.ID,"switcher_plogin")))
wait.click()
t.sleep(2)
driver.quit()

 

 

 

实战:获取本文信息 新浪邮箱 请输入邮箱名/手机号 (元素可见)

先导入
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as es

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://mail.sina.com.cn/")
# 以秒为单位, 表示最多可以等待30秒,超过这个时间就超时
driver.implicitly_wait(30)
# 定位登录元素的信息
driver.find_element(By.LINK_TEXT,"登录").click()
#wait=WebDriverWait(driver=driver,timeout=3).until(method=es.element_to_be_clickable((By.XPATH,"/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]"))) 简写

d=WebDriverWait(
# 先实列化,timeout具体等待事件 until方法
driver=driver,timeout=10).until(
# element_to_be_clickable():元素可见时进行操作
method=es.element_to_be_clickable((
# By元组类型() 输入定位文本框元素信息 XPATH
By.XPATH,"/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]")))
# 断言 验证
assert d.text=="请输入邮箱名/手机号"
driver.quit()

 

 

 

元素可见:获取关于百度 (超链接)

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
driver.implicitly_wait(30)
about=WebDriverWait(driver=driver,timeout=3).until(method=es.element_to_be_clickable((By.LINK_TEXT,"关于百度")))
about.click()
t.sleep(2)
driver.quit()

 

 

 

三、JS操作

1. 浏览器滑动

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.taobao.com")
driver.implicitly_wait(30)
# 点击下一页
# 浏览器滑动到底部
t.sleep(2)
down="var q=document.documentElement.scrollTop=10000"
driver.execute_script(down)
t.sleep(2)
up="var q=document.documentElement.scrollTop=0"
driver.execute_script(up)
driver.quit()

 

 

 

2. 富文本

能写内容,加载图片,和表格的。

def richText(driver,content):
'''
实现在富文本里面输入内容
:param driver: webdriver实例化后的对象信息
:param content: 富文本里面需要输入的文字内容
:return:
'''
js="document.getElementById('ueditor_0').contentWindow.document.body.innerHTML='{0}'".format(content)
driver.execute_script(js)

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://uutool.cn/ueditor/")
driver.implicitly_wait(30)
t.sleep(2)
richText(driver=driver,content="hello python")
t.sleep(2)
driver.quit()

 

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("file:///D:/code/testdev/ui%E8%87%AA%E5%8A%A8%E5%8C%96/Time/index.html")
driver.implicitly_wait(30)
t.sleep(2)
startTime(driver=driver,content="2022-01-01 00:00:00")
t.sleep(2)
endTime(driver=driver,content="2022-01-05 00:00:00")
t.sleep(2)
driver.quit()

 

 

 

3.时间控件

填写时间的属性,具体解决问题的步骤为:

1、取消时间控件的只读属性 2、取消只读属性后,操作input控件的value,其实我们知道input里面输入的内容最终是在value的属性里面。

 

 

def startTime(driver,content):
   '''开始时间控件'''
   js="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');" \
      "$(\"input[placeholder='开始时间≥当前时间']\").attr('value','{0}')".format(content)
   driver.execute_script(js)

def endTime(driver,content):
   '''结束时间控件'''
   js="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');" \
      "$(\"input[placeholder='结束时间>开始时间']\").attr('value','{0}')".format(content)
   driver.execute_script(js)
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("file:///D:/code/testdev/ui%E8%87%AA%E5%8A%A8%E5%8C%96/Time/index.html")
driver.implicitly_wait(30)
t.sleep(2)
startTime(driver=driver,content="2022-01-01 00:00:00")
t.sleep(2)
endTime(driver=driver,content="2022-01-05 00:00:00")
t.sleep(2)
driver.quit()

 

 

 
posted @ 2022-06-29 19:30  Yvonne_26J  阅读(46)  评论(0)    收藏  举报