前置步骤:
安装selenium,chrome驱动,Python3.6
学习目的:
常见API的使用
涉及的API:
step1: 访问一个网址
step2: 网页的前进和后退
step3: 刷新当前页面
step4: 浏览器窗口最大化
step5: 获取并设置当前窗口的位置
step6: 获取并设置当前窗口的大小
step7: 获取页面的title属性值
step8: 获取页面HTML源代码
step9: 获取当前页面的URL
step10: 获取与切换浏览器窗口句柄
step11:获取页面元素的基本信息
step12: 获取页面元素的文本内容
step13: 判断页面元素是否可见
step14: 判断页面元素是否可操作
step15: 获取页面元素的属性
step16: 获取页面的CSS属性值
step17: 情况输入框中的内容
step18: 在输入框中输入指定的内容
step19: 单击按钮
step20: 双击某个元素
step21: 操作单选下拉列表
step22: 断言单选列表选项值
step23: 操作多选的选择列表
step24: 操作可以输入的下拉列表
正式步骤:
测试使用的unittest框架代码如下:
# -*- coding:utf-8 -*-from selenium import webdriverimport unittestclass WebdriverAPI(unittest.TestCase):def setUp(self):# 每个用例都执行,在单个用例运行前执行#打开浏览器self.driver = webdriver.Chrome()def tearDown(self):#每个用例都执行,在单个用例运行后执行#退出浏览器 self.driver.quit()def test_visitURL(self):#测试步骤passif __name__ == '__main__':unittest.main()
step1: 访问一个网址
def test_visitURL(self):url = '/'self.driver.get(url)assert self.driver.title == '百度一下,你就知道'print(self.driver.title)
step2: 网页的前进和后退
def test_visitHistoryPage(self):firstUrl = '/'secondUrl = '/'#访问第一个网址 self.driver.get(firstUrl)time.sleep(2)#访问第二个网址 self.driver.get(secondUrl)time.sleep(2)#回到百度网址 self.driver.back()time.sleep(2)#再回到bing self.driver.forward()time.sleep(2)
step3: 刷新当前页面
self.driver.refresh()
step4: 浏览器窗口最大化
#窗口最大化self.driver.maximize_window()
step5: 获取并设置当前窗口的位置
#获取浏览器位置position = self.driver.get_window_position()#打印出浏览器的坐标print('当前窗口x轴%s,y轴%s'%(position['x'],position['y']))#设置浏览器的位置self.driver.set_window_position(x = 100,y = 100)time.sleep(2)
step6: 获取并设置当前窗口的大小
#获取浏览器窗口大小window_size = self.driver.get_window_size()print('current size %s :'%window_size)print('宽%s,高%s'%(window_size['width'],window_size['height']))#重新设置窗口大小self.driver.set_window_size(width=1000,height=1000)
step7: 获取页面的title属性值
#获取并打印页面titlepage_title = self.driver.titleprint(page_title)#断言页面title内容self.assertEqual(page_title,'百度一下,你就知道1','页面属性值错误')
step8: 获取页面HTML源代码
#获取页面的HTML源代码page_source = self.driver.page_sourceprint(page_source)#断言源码是否包含关键字百度,显然会有回显信息打印出来,正确则没有回显msgself.assertTrue('百度#'in page_source,'不包含')
step9: 获取当前页面的URL
#获取当前页面url self.driver.get(firstUrl)correntPageUrl = self.driver.current_urlprint(correntPageUrl)
step10: 获取与切换浏览器窗口句柄
#获取与切换浏览器窗口句柄 self.driver.get(firstUrl)#获取当前窗口的句柄firstHander = self.driver.current_window_handle#打印获取的第一个窗口句柄print(firstHander)#输入框输入检索内容:seleniumself.driver.find_element_by_id('kw').send_keys('selenium3')#单击搜索按钮self.driver.find_element_by_id('su').click()#设置等待时间3stime.sleep(3)#单击需要点击的网页链接self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()time.sleep(3)#获取所有的句柄allHander = self.driver.window_handlesprint('当前窗口句柄:'+ allHander[-1])#获取所有窗口句柄for hander in allHander:print(hander)#将操作句柄切换到当前窗口self.driver.switch_to.window(allHander[-1])time.sleep(3)#可以关闭当前窗口,不然关闭的是firstUrl self.driver.close()time.sleep(3)print(firstHander)self.driver.switch_to.window(firstHander)self.driver.find_element_by_id('kw').clear()time.sleep(2)
step11:获取页面元素的基本信息
firstUrl = '/'self.driver.get(firstUrl)testElement = self.driver.find_element_by_xpath("//a[text()='新闻']")print(testElement.tag_name,testElement.size)
step12: 获取页面元素的文本内容
testElementText = self.driver.find_element_by_xpath("//a[text()='新闻']")print(testElementText.text)
step13: 判断页面元素是否可见
testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")print(testElementVisiable.is_displayed())
step14: 判断页面元素是否可操作,是否已选
testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")print(testElementVisiable.is_displayed())#判断页面元素是否可操作print(testElementVisiable.is_enabled())
step15: 获取页面元素的属性
#获取页面元素属性attribution = testElementVisiable.get_attribute('class')print(attribution)attribution1 = testElementVisiable.get_attribute('name')print(attribution1)attribution2 = testElementVisiable.get_attribute('text')print(attribution2)
step16: 获取页面的CSS属性值
css_property = self.driver.find_element_by_xpath("//a[text()='新闻']")print(css_property.value_of_css_property('height'))print(css_property.value_of_css_property('width'))print(css_property.value_of_css_property('font-size'))
step17: 清空输入框中的内容
self.driver.find_element_by_id('kw').send_keys('test')self.driver.find_element_by_id('kw').clear()
step18: 在输入框中输入指定的内容
self.driver.find_element_by_id('kw').send_keys('test')
step19: 单击按钮
self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()
step20: 双击某个元素
input = self.driver.find_element_by_id('kw')input.send_keys('双击全选,背景高亮')from selenium.webdriver import ActionChainsaction_chains = ActionChains(self.driver)#双击后,高亮两个字背景高亮,只是为了证明双击起效了 action_chains.double_click(input).perform()time.sleep(3)
step21: 操作单选下拉列表
测试用下拉html页面代码
<html><body><form><select name="cars"><option value="volvo">Volvo</option><option value="saab">Saab</option><option value="fiat">Fiat</option><option value="audi">Audi</option></select></form></body></html>
测试脚本:
#操作简单的下拉列表url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'self.driver.get(url)all_options = self.driver.find_elements_by_tag_name('option')for option in all_options:print(option.text)print(option.get_attribute('value'))option.click()time.sleep(1)
step22: 断言单选列表选项值
url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'self.driver.get(url)from selenium.webdriver.support.ui import Selectselect_element = Select(self.driver.find_element_by_name('cars'))current_options = select_element.optionscurrent_optionsList = []#遍历options,并生成option文本值的列表for option in current_options:print(option.text)current_optionsList.append(option.text)print(current_optionsList)expect_optionsList = ['Volvo','Saab','Fiat','Audi']#断言两个列表是否相同self.assertListEqual(current_optionsList,expect_optionsList)
step23: 操作多选的选择列表
url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'self.driver.get(url)from selenium.webdriver.support.ui import Selectselect_element = Select(self.driver.find_element_by_name('cars'))select_element.select_by_index(0)select_element.select_by_visible_text('Fiat')select_element.select_by_value('audi')time.sleep(3)#取消选中的单位 select_element.deselect_all()time.sleep(3)
step24: 操作可以输入的下拉列表
测试用HTML代码
<!DOCTYPE html><html><body><div style="position: relative;"><input list="pasta" id = "select"><datalist id ="pasta"><option>C</option><option>Java</option><option>Python</option><option>C#</option><option>Ruby</option></datalist></div></body></html>
测试脚本:
#带输入的下拉列表操作url = 'F:\\python_stack\\python_autotest\\webdriver_api\\data.html'self.driver.get(url)from selenium.webdriver.support.ui import Selectfrom mon.keys import Keysself.driver.find_element_by_id("select").clear()time.sleep(1)#输入的同时向下按箭头self.driver.find_element_by_id("select").send_keys("Java",Keys.ARROW_DOWN)time.sleep(2)self.driver.find_element_by_id("select").send_keys(Keys.ENTER)time.sleep(2)
难点分析:
API看似简单,实际的简单应用中,还是花了很多时间去实际运行,眼高手低不好
学习总结:
还有24个常用API,下班后继续
参考资料:
参考英文官方资料:http://selenium-python.readthedocs.io/locating-elements.html