from selenium import webdriver
driver=webdriver.Chrome() #打开谷歌浏览器
# driver=webdriver.Ie() #打开Ie浏览器
# driver=webdriver.Firefox() #打开火孤
# 执行选中的代码: 选中代码后,右键选择“Execute selection in python console”
print(driver.name) #获取浏览器名 chrome
driver.maximize_window() #最大化浏览器
# driver.minimize_window() #最小化浏览器
driver.get("https://liushilive.github.io/html_example/index.html") #打开指定的网址
print(driver.title) #元素模拟 获取网页标题
print(driver.current_url) #获取当前网页的地址 https://liushilive.github.io/html_example/index.html
driver.refresh() #网页的刷新
driver.back() #后退
driver.forward() #前进
driver.close() #关闭当前标签页
driver.quit() #退出浏览器
# 查找单个元素的七种方法,如果找不到元素,会报错
# (1)id
ele=driver.find_element_by_id("uid")
ele.send_keys("test")
# (2)name
ele=driver.find_element_by_name("user")
ele.send_keys('abc')
# (3)class
ele=driver.find_element_by_class_name("form-control")
ele.send_keys('class')
# (4)xpath 万能的,其它方法找不到元素时,就用这个,一定要掌握
ele=driver.find_element_by_xpath("//input[@id='uid']")
ele.send_keys("xpath")
# (5)link text 链接文本(双标签)
ele=driver.find_element_by_link_text("返回主页") #定位到该元素上
ele.click() #点击该元素
# (6)partial link text 部分链接文本
ele=driver.find_element_by_partial_link_text("主页")
ele.click()
# (7)tag name 标签名 很容易找到多个元素,默认取第1个
ele=driver.find_element_by_tag_name("input")
ele.send_keys("888")
# 当找到的元素的多个的时候,我们需要选择其中一个,那么用
ele=driver.find_elements_by_tag_name("input") #多一个s ,接收多个元素,返回来的一个列表
ele[1].send_keys("666") #通过下标获取指定元素(输入密码)
# 定位“用户名:”
ele=driver.find_element_by_xpath("//*[@for='uid']")
print(ele)
#定位到“北京”下拉菜单
ele=driver.find_element_by_id("s1Id")
# ele=driver.find_element_by_xpath("//*[@id='s1Id']") #用Xpath
ele.click()
# 元素操作:点击,输入内容
ele=driver.find_element_by_xpath("//*[@type='reset']") #定位到“重置”按钮
ele.click()
ele=driver.find_element_by_id('pwd') #定位到密码输入框元素上
ele.send_keys("abcd") #输入内容
ele.clear() #清空文本框内容
# 导入输入键盘类
from selenium.webdriver.common.keys import Keys #导入键盘按键模块
ele=driver.find_element_by_id("uid")
ele.send_keys('123456')
ele.send_keys(Keys.LEFT*2) #光标向左移动2位
ele.send_keys(Keys.RIGHT*3) #光标向右移动3位
ele.send_keys(Keys.LEFT*4) #光标向左移动4位
ele.send_keys(Keys.BACK_SPACE) #删除光标前面的一个字符
ele.send_keys(Keys.RIGHT*4,Keys.BACK_SPACE*2) #光标先向右移4位,再执行二次删除键
# 如何对下拉列表操作:定位-展开-选中-收起
ele=driver.find_element_by_id("s1Id") #定位到下拉列表
ele.click() #点击
abc=driver.find_element_by_xpath("//option[@value='sh']") #定位到“上海”元素上
abc.click() #点击“上海”元素
ele.click() #点击‘下拉菜单’
# 多选下位列表的操作:按住ctrl+点击,实现多选
from selenium.webdriver.support.select import Select #导入下拉框类
ele=driver.find_element_by_id("s3Id") #定位到多选下拉列表
select=Select(ele) #实例化类,得到对象
select.select_by_index(0) #选第1个
select.select_by_index(2) #选第3个
select.select_by_index(8) #选第9个
# select.select_by_index(18) #如果超出下标值会报错
print(select.all_selected_options) #显示所有选中的项
select.deselect_by_index(0) #取消第1个选项
select.deselect_all() #取消所有选项
# 警告框是浏览器的行为,不是网页的操作,一旦弹出警告框,需要先处理,因为不处理,网页上所有元素无法操作。
driver.find_element_by_id("b1").click() #打开警告框
alert=driver.switch_to.alert #切换警告框上
print(alert.text) #打印警告框上的文本内容 有警告?
alert.accept() #点击【确定】
alert.dismiss() #点击【取消】
# 带输入框警告框
driver.find_element_by_id("b2").click()
alert=driver.switch_to.alert
alert.send_keys("张三")
alert.accept()
# 模态框的操作 它是属于网页的元素,可以定位
driver.find_element_by_id("b3").click()
ele=driver.find_element_by_id("basic-addon1") #定位到模态框上的姓名输入文本框上
ele.send_keys("Test")
driver.find_element_by_id("b5").click()
# 双击操作 需要用到行动链
ele=driver.find_element_by_id("dblclick")
webdriver.ActionChains(driver).double_click(ele).perform() #双击元素
# 悬浮的操作
ele=driver.find_element_by_link_text("分 类")
webdriver.ActionChains(driver).move_to_element(ele).perform() #光标移动到该元素上
ele=driver.find_element_by_link_text("编程语言")
webdriver.ActionChains(driver).move_to_element(ele).perform()
ele=driver.find_element_by_link_text("Java")
webdriver.ActionChains(driver).move_to_element(ele).perform()
#拖动
# 滑块 class='handler' 如果class有多个值,只能用其中一个
ele=driver.find_element_by_class_name("handler") #定位到滑块上
# 拖动距离
width=driver.find_element_by_class_name("drag_text").rect.get("width") #根据窗口大小变化
print(width)
# 一次性拖到底
webdriver.ActionChains(driver).drag_and_drop_by_offset(ele,width,0).perform()
driver.find_element_by_id("re_drag").click() #点击“重置”按钮
# 模拟人为拖动操作
webdriver.ActionChains(driver).click_and_hold(ele).perform() #按住鼠标左键(滑块)
for i in range(50):
webdriver.ActionChains(driver).move_by_offset(width/50,0).perform()
webdriver.ActionChains(driver).release().perform() #释放鼠标
# 交换元素位置:移动时后面的元素往后移
ele1=driver.find_element_by_xpath("//*[@data-dad-id='1']")
ele6=driver.find_element_by_xpath("//*[@data-dad-id='6']")
webdriver.ActionChains(driver).drag_and_drop(ele6,ele1).perform() #两个元素交换
# 滚动条操作 Selenium元法完成,需要借助JS(区分大小写)
# 浏览的行为,都需要用JS
scroll_top_js='window.scrollTo(0,0)' #滚动到最上面
driver.execute_script(scroll_top_js) #执行JS脚本
scroll_end_js='window.scrollTo(0,document.body.scrollHeight)' #滚动到最下面 document.body.scrollHeight 获取浏览器body 的高度
driver.execute_script(scroll_end_js) #执行JS脚本
# 滚动到某个元素可见位置上(密码输入框)
scroll_view_js="arguments[0].scrollIntoView()"
ele=driver.find_element_by_id("pwd") #定位密码输入框元素上
driver.execute_script(scroll_view_js,ele)
# 自动化测试中,对于验证码如何操作
# 1.让开发人员去掉验证码
# 2.让开发人员给一个万能验证码
# 框架 网页内部嵌套网页
# 外层网页只能操作外层网页元素,如果要操作里面网页,需要进入到里面才可以操作
# driver.find_element_by_name("btnSolve").click() #报错,在外面不能操作里面的元素
#找到子框架
fream2=driver.find_element_by_name("frame2") #定位到fram2框架上
driver.switch_to.frame(fream2) #切换到fram2框架里面
driver.find_element_by_name("btnSolve").click() #点击【Solve】按钮
driver.switch_to.alert.accept() #切换到警告框上,并点击【确定】
driver.switch_to.parent_frame() #返回上一层框架
driver.find_element_by_id("uid").send_keys('abc') #从里面出来后就可以操作该网页元素
driver.switch_to.default_content() #直接返回最顶�
评论0