Select类、Alert类、iFrame鼠标事件
https://github.com/SeleniumHQ/selenium
1.下拉框(此方法只能用于select标签,获取不到元素属性的情况)
1 from selenium import webdriver 2 from selenium.webdriver.support.select import Select 3 # 包 包 包 模块 类 4 import time 5 6 7 driver=webdriver.Chrome() 8 driver.maximize_window() 9 driver.get("file:///D:/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/index(1).html") 10 nr=driver.find_element_by_id("nr") 11 obj=Select(webelement=nr) 12 time.sleep(2) 13 #索引方式 14 obj.select_by_index(2) 15 #文本方式 16 obj.select_by_visible_text("Java语言") 17 #val方式 18 obj.select_by_value("Java") 19 time.sleep(2) 20 driver.quit()
(把整个html文件直接拖到浏览器的网址处,然后复制获取这个地址栏的内容)

1.1下拉框操作步骤:
1.先导入Select类 from selenium.webdriver.support.select import Select
2.定位到下拉框的元素属性 下拉框元素=
3.然后对Select类进行实例化 obj=Select(webelement=下拉框元素)
4.使用Select类进行实例化后的对象调用该类里面的方法 obj.select_by_index(); obj.select_by_visible_text(""); obj.select_by_value("");
以html文件中的Java为例:
#索引方式
.select_by_index(2)
#文本方式
.select_by_visible_text("Java语言")
#value方式
.select_by_value("Java")

2.下拉框(可以获取到下拉框内容的属性的情况)
1 from selenium import webdriver 2 import time as t 3 4 driver=webdriver.Chrome() 5 driver.maximize_window() 6 driver.get("https://www.zhipin.com/xian/?sid=sem_pz_bdpc_dasou_title") #boss直聘首页 7 t.sleep(3) 8 driver.find_element_by_name("query").send_keys("测试专家") #搜索输入”测试专家“ 9 t.sleep(3) 10 driver.find_element_by_xpath("/html/body/div[1]/div[3]/div/div[1]/div[1]/form/button").click() #点击搜索按钮 11 t.sleep(3) 12 driver.find_element_by_class_name("ipt").click() #选择工作经验下拉框 13 t.sleep(3) 14 driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div[4]/div[1]/span/div/ul/li[5]/a").click() #点击1-3年 15 t.sleep(3) 16 driver.quit()

二、Alert类
https://element.eleme.cn/#/zh-CN
1 from selenium import webdriver 2 import time 3 4 '''确定取消按钮''' 5 driver=webdriver.Chrome() 6 driver.maximize_window() 7 driver.get("file:///D:/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/%E5%B7%A5%E5%85%B7/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E7%A1%AE%E5%AE%9A%E5%8F%96%E6%B6%88%E6%B6%88%E6%81%AF.html") 8 time.sleep(3) 9 driver.find_element_by_tag_name("input").click() 10 time.sleep(3) 11 #点击确定操作 12 driver.switch_to.alert.accept() 13 time.sleep(3) 14 #页面刷新 15 driver.refresh() 16 driver.find_element_by_tag_name("input").click() 17 time.sleep(3) 18 #点击取消操作 19 driver.switch_to.alert.dismiss() 20 time.sleep(3) 21 driver.quit() 22 23 '''获取警告框的文本信息''' 24 driver=webdriver.Chrome() 25 driver.maximize_window() 26 driver.get("file:///D:/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/%E5%B7%A5%E5%85%B7/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E8%AD%A6%E5%91%8A%E6%A1%86.html") 27 time.sleep(3) 28 print(driver.switch_to.alert.text) 29 time.sleep(3) 30 driver.quit() 31 32 '''消息对话框''' 33 driver=webdriver.Chrome() 34 driver.maximize_window() 35 driver.get("file:///D:/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/%E5%B7%A5%E5%85%B7/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E6%B6%88%E6%81%AF%E5%AF%B9%E8%AF%9D%E6%A1%86.html") 36 time.sleep(3) 37 #点击按钮 38 driver.find_element_by_tag_name("input").click() 39 time.sleep(3) 40 #输入内容 41 driver.switch_to.alert.send_keys("WEB自动化测试") 42 time.sleep(3) 43 #点击确定 44 driver.switch_to.alert.accept() 45 time.sleep(3) 46 #刷新 47 driver.refresh() 48 driver.find_element_by_tag_name("input").click() 49 time.sleep(3) 50 driver.switch_to.alert.send_keys("WEB自动化测试") 51 time.sleep(3) 52 #点击取消 53 driver.switch_to.alert.dismiss() 54 time.sleep(2) 55 driver.quit()
Alert类不需要导入
弹出框的操作一般是:先对弹出框点击 ,然后使用方法来点击接受或者拒绝
1.类中方法:
text:获取弹出框的文本信息
accept:是接受Confirm弹出框
dismiss:是拒绝接受Confirm弹出框
send_keys:是在Prompt消息对话框里面输入想要输入的内容
2.确定/取消的按钮

driver.switch_to.alert.accept() 确定
driver.switch_to.alert.dismiss() 取消

.switch_to.alert.text

1 from selenium import webdriver 2 import time as t 3 4 driver=webdriver.Chrome() 5 driver.maximize_window() 6 driver.get("https://file.qq.com/") 7 t.sleep(6) 8 #进入到第一层的iFrame 9 driver.switch_to.frame("login_frame1") #ID方法进入iframe 10 t.sleep(3) 11 #进入到第二层的iFrame 12 driver.switch_to.frame(0) #索引方法进入iframe(这里的索引指的是此iframe在同层级iframe中的位置) 13 t.sleep(3) 14 driver.find_element_by_xpath("/html/body/div[1]/div[9]/a[1]").click() 15 t.sleep(3) 16 driver.find_element_by_id("u").send_keys("513399690@qq.com") 17 t.sleep(2) 18 driver.quit()
1.遇到iFrame框架,解决问题的思路是:
1、先进入到iFrame的框架
(如果frame有多层,需要一层层进入。进入的方法有三种)
2、然后再定位框架里面的元素属性
2.怎么判断?
当你使用了所有的元素定位的方式并且都是正确的,但是就是提示找不到。那么这个查看源码是否存在iFrame的框架。
如果存在,通过三种方式可以进入到iFrame的框架:

1、通过ID
2、通过索引 (使用索引进入框架时,需要注意索引是同层级中我们的目标iframe的索引,不要跨级去看索引了)
3、通过name(基本不使用)
driver .switch_to.frame( )
四、鼠标事件
先导入ActionChains类----把鼠标实例化-----定位元素------移动鼠标到这个元素的位置
1 from selenium import webdriver 2 from selenium.webdriver.common.action_chains import ActionChains 3 import time as t 4 5 '''鼠标悬浮''' 6 driver=webdriver.Chrome() 7 driver.maximize_window() 8 driver.get("https://www.baidu.com") 9 #鼠标事件实例化 10 obj=ActionChains(driver=driver) 11 #要定位的元素属性的对象 12 setting=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[4]/span") #“设置”的位置 13 obj.move_to_element(setting).perform() #把鼠标移动到“设置” 14 t.sleep(5) 15 #点击“搜索设置” 16 driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[4]/div[1]/div/a[1]/span").click() 17 t.sleep(5) 18 driver.quit() 19 20 '''右键的操作''' 21 driver=webdriver.Chrome() 22 driver.maximize_window() 23 driver.get("https://www.baidu.com") 24 #鼠标事件进行实例化 25 obj=ActionChains(driver=driver) 26 so=driver.find_element_by_id("kw") #id定位百度搜索框 27 obj.context_click(so).perform() #对 百度搜索框右键操作 28 t.sleep(3) 29 driver.quit() 30 31 '''鼠标双击操作''' 32 driver=webdriver.Chrome() 33 driver.maximize_window() 34 driver.get("https://www.baidu.com") 35 obj=ActionChains(driver=driver) 36 t.sleep(3) 37 driver.find_element_by_id("kw").send_keys("软件测试") #在搜索栏输入内容 38 t.sleep(3) 39 soButton=driver.find_element_by_id("su") #定位到“百度一下” 40 obj.double_click(soButton).perform() #双击“百度一下” 41 t.sleep(5) 42 driver.quit()
from selenium.webdriver.common.action_chains import ActionChains
obj=ActionChains(driver=driver)
1.悬浮操作
类实例化对象.move_to_element(元素).perform()

类实例化对象.context_click(元素).perform()

3.双击操作
场景:比如付款时的立即支付按钮,双击两次会不会出现两份账单,这些都是测试人员需要测试的。
类实例化对象.double_click(元素).perform()




浙公网安备 33010602011771号