自动化测试工具selenium使用指南
python+selenium环境安装:
直接pip install selenium
安装webdriver
打开/关闭浏览器:
import time from selenium import webdriver browser = webdriver.Edge() browser.get("http://www.baidu.com/") time.sleep(5) browser.get("https://mail.163.com/") browser.quit()
使用implicitly_wait设置最长等待时间
import time from selenium import webdriver browser = webdriver.Edge() browser.implicitly_wait(10) browser.get("http://www.baidu.com/") time.sleep(5) browser.quit()
元素定位:
find_element()
系列:用于定位单个的页面元素。find_elements()
系列:用于定位一组页面元素,获取到的是一组列表。
可以通过id属性定位:
find_element(By.ID,'XX')
id定位,根据元素的id属性值定位,最为方便且唯一,但有可能不存在,也可能动态生成。
import time from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("http://www.baidu.com/") time.sleep(5) # 定位搜索框 input_text = browser.find_element(By.ID, 'kw') # 在搜索框中输入内容 input_text.send_keys('selenium') time.sleep(5) browser.quit()
可以通过name属性定位:
find_element(By.NAME,'xx')
name定位,根据元素的name属性值定位,定位到的标签不一定是唯一的。
可以通过class属性定位:
find_element_by(By.CLASS_NAME,'xx')
class定位,根据元素的class属性值定位,但可能受JS影响动态变化。定位到的标签不一定是唯一的。
可以通过tag标签定位:
find_element(By.TAG_NAME,'xx')
tag name定位,根据元素的标签名定位,定位到的标签不一定是唯一的。
可以通过link定位:
link
表示包含有属性href
的标签元素,如:<a href="https://www.csdn.net">linktext</a>
可以通过LINK_TEXT
进行定位。
find_element(By.LINK_TEXT,'XX')
根据链接文本全匹配进行精确定位。
find_element(By.PARTIAL_LINK_TEXT,'XX')
根据链接文本模糊匹配进行定位。
可以通过xpath定位:
xpath
是一种在XML文档中定位元素的语言
可以通过css选择器定位:
find_element(By.CSS_SELECTOR,'XX')
根据元素的css选择器来完成定位,可以准确定位任何元素,但需要熟练掌握css选择器css
选择器
几种方式定位的区别:
定位方式 | 定位是否唯一 | 返回值类型 | 备注 |
id属性定位 | 唯一 | element |
只有标签有id属性时才能使用 |
name属性定位 | 可能不唯一 |
element或elements列表 |
只有标签有name属性时才能使用 |
class属性定位 | 可能不唯一 | element或elements列表 | 只有标签有class属性时才能使用 |
tag定位 | 可能不唯一 | element或elements列表 | 通常得到的都是一组列表 |
link_text精确定位 | 可能不唯一 | element或elements列表 | 只有存在link_text相同时, 才得到列表 |
link_text模糊定位 | 可能不唯一 | element或elements列表 | 一般用于定位<a></a>标签 |
xpath定位 | 可能不唯一 | element或elements列表 | 一般用来做精准定位,用/表示元素层级关系,xpath属性定位值必须加引号 |
css选择器定位 | 可能不唯一 | element或elements列表 |
一般用作精确定位,用>或空格表示元素层级关系,属性值可以不加引号 |
文本输入、清除与提交:
import time from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("http://www.baidu.com/") time.sleep(5) # 定位搜索框 input_text = browser.find_element(By.ID, 'kw') # 通过Xpath定位搜索框并输入内容查询 browser.find_element(By.XPATH, '//*[@id="kw"]').send_keys('selenium') input_text.submit() time.sleep(3) browser.quit()
获取页面内容:
import time from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("http://www.baidu.com/") time.sleep(5) title = browser.title print(title) source_code = browser.page_source print(source_code) url = browser.current_url print(url) text = browser.find_element(By.XPATH, '//*[@id="s-top-left"]').text print(text) time.sleep(3) browser.quit()
调整浏览器尺寸大小:
import time from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("http://www.baidu.com/") time.sleep(5) browser.minimize_window() time.sleep(2) browser.maximize_window() time.sleep(3) browser.quit()
前进一页,后退一页:
.forward() .back()
页面刷新:
.refresh()
窗口切换:
current_window_handle获取当前窗口的句柄 window_handles获取所有打开页面的句柄,是一个列表 switch_to.window(“XX”)切换到指定页面,XX代表页面句柄 switch_to.frame(XX)切换到内敛框架页面,XX代表内联框架标签的定位对象 swith_to.parent_frame()切回到内敛框架的上一级,即从内敛框架切出 switch_to.alert切换到页面弹窗
下拉列表操作:
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("file:///D:/3-项目/Projects/Practise/For_test/learning_selenium.html") time.sleep(5) select = Select(browser.find_element(By.TAG_NAME, 'select')) select.select_by_value("Python") time.sleep(2) select.select_by_visible_text("C++") time.sleep(2) select.select_by_index(0) time.sleep(2) for i in select.options: i.click() time.sleep(2) time.sleep(3) browser.quit()
弹窗操作:
switch_to.alert获取弹窗对象。 text弹窗内容 accept()接受弹窗 dismiss()取消弹窗
鼠标操作:
鼠标操作需要的类:ActionChain move_to_element(X)鼠标悬停,X代表定位到的标签 double_click(X)双击 context_click(X)右击 perform() 执行所有存储在ActionChains()类中的行为,做最终的提交
不管执行哪个方法,最后都要调用perform()
方法,将操作呈现出来。
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.select import Select browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get('https://www.baidu.com/') browser.maximize_window() time.sleep(3) # 创建对象 action = ActionChains(browser) action.move_by_offset(10, 50).perform() time.sleep(2) # 定位标签,移动鼠标 tag = browser.find_element(By.XPATH, '//*[@id="kw"]') action.move_to_element(tag).perform() time.sleep(2) tag.send_keys('python') tag2 = browser.find_element(By.XPATH, '//*[@id="su"]') action.move_to_element(tag2).click().perform() time.sleep(3) browser.quit()
键盘操作:
send_keys(Keys.BACK_SPACE)执行删除键Backspace send_keys(Keys.CONTROL,'a')全选 send_keys(Keys.CONTROL,'x')剪切 send_keys(Keys.CONTROL,'c')复制 send_keys(Keys.CONTROL,'v')粘贴 send_keys(Keys.SPACE): 空格键(Space) send_keys(Keys.TAB): 制表键(Tab) send_keys(Keys.ESCAPE): 回退键(Esc) send_keys(Keys.ENTER): 回车键(Enter) send_keys(Keys.F1): 键盘 F1
标签:定位,webdriver,python,自动化,selenium,element,time,browser From: https://www.cnblogs.com/wangzhilong/p/17672020.html