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()
![]()
 
 
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号