既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
三、selenium选择器
模拟浏览器无非请求---->显示页面----->寻找标签 ------>点击标签的事件,所以selenium的关键是怎么找到页面中的标签,进而触发标签事件;
1.通过标签id属性进行定位
browser.find_element(By.ID,‘kw’).send_keys(“美女”) browser.find_element_by_id(‘kw’).send_keys(‘性感’)
2.通过标签name属性进行定位
browser.find_element_by_name(“wd”).send_keys(“Linux”) browser.find_element(By.NAME,‘wd’).send_keys(“美女”)
3.通过标签名进行定位
browser.find_element_by_tag_name(“input”).send_keys(“selenium”) browser.find_element(By.TAG_NAME, ‘input’).send_keys(‘aaa’)
4.通过CSS查找方式进行定位
browser.find_element(By.CSS_SELECTOR, ‘#kw’).send_keys(‘python django’) browser.find_element(By.CSS_SELECTOR, ‘#kw’).send_keys(‘python 之美’)
5.通过xphan方式定位
browser.find_element_by_xpath(‘//*[@id=“kw”]’).send_keys(“python Tornado”) browser.find_element(By.XPATH, ‘//*[@id=“kw”]’).send_keys(‘吐槽大会’)
6.通过搜索 页面中 链接进行定位
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
browser.find_element_by_link_text(“新闻”).click()
7.通过搜索 页面中 链接进行定位 ,可以支持模糊匹配
browser.find_element_by_partial_link_text(“新”).click() browser.find_element_by_partial_link_text(“闻”).click()
8.小结
上述均可以改写成find_element(By.ID,‘kw’)的形式
find_elements_by_xxx的形式是查找到多个元素,结果为列表 import time from selenium import webdriver#驱动浏览器 from selenium.webdriver import ActionChains #滑动 from selenium.webdriver.common.by import By #选择器 from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #键盘按键操作 from selenium.webdriver.support import expected_conditions as EC #等待所有标签加载完毕 from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕 寻找某些元素 browser=webdriver.Chrome() #调用Chrome 驱动,生成浏览器对象 wait=WebDriverWait(browser,10) #设置selenium等待浏览器加载完毕的最大等待时间 try: browser.get(‘https://www.baidu.com/’) #通过标签id属性进行定位 # browser.find_element(By.ID,‘kw’).send_keys(“美女”) # browser.find_element_by_id(‘kw’).send_keys(‘性感’) #通过标签name属性进行定位 # browser.find_element_by_name(“wd”).send_keys(“Linux”) # browser.find_element(By.NAME,‘wd’).send_keys(“美女”) #通过标签名称进行定位 # browser.find_element_by_tag_name(“input”).send_keys(“selenium”) # browser.find_element(By.TAG_NAME, ‘input’).send_keys(‘aaa’) # 通过CSS查找方式进行定位 # browser.find_element(By.CSS_SELECTOR, ‘#kw’).send_keys(‘python django’) # browser.find_element(By.CSS_SELECTOR, ‘#kw’).send_keys(‘泰山’) # 通过xphan方式定位 # browser.find_element_by_xpath(‘//*[@id=“kw”]’).send_keys(“python Tornado”) # browser.find_element(By.XPATH, ‘//*[@id=“kw”]’).send_keys(‘吐槽大会’) # 通过搜索 页面中 链接进行定位 # browser.find_element_by_link_text(“新闻”).click() #通过搜索 页面中 链接进行定位 ,可以支持模糊匹配 # browser.find_element_by_partial_link_text(“新”).click() # browser.find_element_by_partial_link_text(“闻”).click() finally: browser.find_element_by_id(“su”).click() time.time(3) browser.close() # 关闭浏览器browser.quit()
四、等待元素被加载
1、selenium只是模拟浏览器的行为,而浏览器解析页面是需要时间的(执行css,js),一些元素可能需要过一段时间才能加载出来,为了保证能查找到元素,必须等待
2、等待的方式分两种
wait=WebDriverWait(browser,10) #显式等待 wait1=browser.implicitly_wait(10) #隐式等待 wait.until(EC.presence_of_element_located((By.CLASS_NAME,‘tH0’))) test = wait.until(lambda x: x.find_element_by_xpath(‘xpath’)) ‘’’ 显式等待:指定等待某个标签加载完毕 隐式等待:等待所有标签加载完毕 ‘’’
五、元素交互操作
ActionChains
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况(如:iframe标签),比如单击、双击、点击鼠标右键、拖拽(滑动验证)等。而selenium给我们提供了一个类来处理这类事件——ActionChains
#iframe标签切换 #如果网页页面嵌套frame标签,子页面访问不到父页面的内容,父页面也访问不到子页面的内容所以需要切换; from selenium import webdriver from selenium.webdriver import ActionChains #鼠标键盘动作链 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys # 键盘按键操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素 import time browser=webdriver.Chrome() wait1=WebDriverWait(browser,10) browser.get(‘http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable’) browser.switch_to.frame(‘iframeResult’)#切换到id=‘iframewrapper’的iframe子标签 action_chains=ActionChains(browser) #实例化1个动作链队列 source=browser.find_element_by_id(‘draggable’) #找到拖拽的源标签 target=browser.find_element_by_id(‘droppable’)#找到拖拽的目标标签 action_chains.drag_and_drop(source,target).perform()#把动作放到动作链中,perform()准备串行执行; ‘’’ click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_element=None) ——点击鼠标右键 double_click(on_element=None) ——双击鼠标左键 drag_and_drop(source, target) ——拖拽到某个元素然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开 key_down(value, element=None) ——按下某个键盘上的键 key_up(value, element=None) ——松开某个键 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标 move_to_element(to_element) ——鼠标移动到某个元素 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置 perform() ——执行链中的所有动作 release(on_element=None) ——在某个元素位置松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素 ‘’’ time.sleep(5) browser.quit() 关于ActionChains参看:http://blog.csdn.net/huilan_same/article/details/52305176
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**