Selenium是一个应用于web应用程序的测试工具,支持多平台,多浏览器,多语言
去实现ui自动化测试
环境搭建好后需要学习 selenium 的 webdriver 框架,它不像 QTP 之类的有 GUI 界面的可视化工具,是webdriver 框架的 API。
dx=webdriver.Chrome() #创建一个webdriver对象,实现对浏览器的操作。这里用的谷歌浏览器
dx=webdriver.Ie()
dx=webdriver.firefox() #.后边最好用联想,不要自己输入。小括号是为了把它声明为一个匿名对象,当前的driver就是一个浏览器驱动对象,可用来对对应浏览器实现操作的动作
#UI自动化所有的调用都必须在最前面加上一个driver对象
#通过对象来打开浏览器且输入网址
#通过对象调用get方法来打开一个网站URL
一、打开浏览器get
开一个
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
开两个
覆盖、重开窗口
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象,实现对浏览器的操作。这里用的谷歌浏览器
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
# dx.get("https://www.jingdong.com/") #覆盖
w="window.open('https://www.jd.com/')" #重开窗口
dx.execute_script(w) #重开窗口需要这个
二、时间等待(页面需要加载,最好等加载完再进行下一步操作)
强制等待sleep,找不找得到元素都要等待
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
# dx.get("https://www.jingdong.com/") #覆盖
time.sleep(2) #休眠2s
w="window.open('https://www.jd.com/')" #重开窗口
dx.execute_script(w)
selenium execute_script常用方法汇总_driver.executescript-CSDN博客
隐藏等待,在规定时间内找到了下一步,更智能一点,节约时间
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
dx.implicitly_wait(10)
w="window.open('https://www.jd.com/')" #重开窗口
dx.execute_script(w)
显行等待,等待元素出现后再进行下一步操作WebDriverwait
三、刷新refresh(页面操作后同步数据)
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.refresh() #刷新
dx.execute_script(w)
四、页面切换 返回上一步back
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.get("https://www.jingdong.com/") #覆盖
time.sleep(2) #休眠2s
dx.back() #返回上一页
五、切换到下一步forward
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.get("https://www.jingdong.com/") #覆盖
time.sleep(2) #休眠2s
dx.back() #返回上一页
dx.forward()#切换到下一页
六、设置页面大小set_window_size
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.set_window_size(540,960) #手机分辨率
七、窗口最大化 maximize_window()
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.maximize_window()#窗口最大化
八、抓取截图存到本地get_screenshot_as_file
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.get_screenshot_as_file(r"E:\新建文件夹\bb.png")
九、关闭 当前窗口close
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.close()#关闭当前窗口
十、关闭所有窗口,结束进程 quit (可以回收C盘的临时文件)
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2) #休眠2s
dx.get("https://www.jingdong.com/") #覆盖
time.sleep(2) #休眠2s
dx.quit()
十一、打印当前抬头,标题 print(dx.title)
from selenium import webdriver #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
print(dx.title) #查看标题
w="window.open('https://www.jd.com/')" #重开窗口
dx.execute_script(w)
print(dx.title) #查看标题
time.sleep(2) #休眠2s
dx.get_screenshot_as_file(r"E:\新建文件夹\bb.png")
定位元素 id name class xpath partial_link_text tag_name css
一、查看元素属性
通过F12开发者工具
通过箭头点击,右边是输入框属性
1、根据基属性进行定位 id
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(1)
dx.maximize_window()
dx.find_element_by_id("kw").send_keys()
2、name定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_name("wd").send_keys("name定位")
3、class定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_class_name("s_ipt").send_keys("class定位")
4、链接定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_link_text("hao123").click()
5、模糊匹配
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_partial_link_text("hao").click()
6、xpath定位 在开发者界面右击copy xpath
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_xpath('//*[@id="cke_8781"]').send_keys("xpath定位")#
7、css定位 copy selector
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_css_selector('//*[@id="cke_8781"]').send_keys("css定位")#
8、js定位方法
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
js="document.getElementById('kw').value='js定位'"
dx.execute_script(js)
9、tag name标签名称(单独用很难一次性定位,加入for循环组合使用)
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
inputs=dx.find_elements_by_tag_name("input") #定位到所有input标签
for i in inputs:
if i.get_attribute("name")=="wd": #当i这个input标签中有个id属性值为kw就表示已经定位到
i.send_keys("tag_name定位")
格式:driver.find_element_by_xpath(xpath表达式)
两个定位:
1、绝对定位:
特点:1.以单斜杠/开头;2.从页面根元素(HTML标签)开始,严格按照元素在HTML页面中的位置和顺序向下查找
如:/html/body/div[2]/div[1]/div[5]/div/div/form/span[1]/input
2、相对定位:(我们一般都是用相对定位来定位的)
特点:1.以双斜杠//开头;2.不考虑元素在页面当中的绝对路径和位置;3.只考虑是否存在符合表达式的元素即可。
2.1使用标签名+节点属性定位
语法://标签名[@属性名=属性值]
一、xpath相对路径 符号//
//*[@id="kw"]
绝对路径:/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
语法://标签名[@属性名=属性值]
1.xpath中ID定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
dx.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath中的id定位")
2.xpath中的class定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
dx.find_element_by_xpath('//*[@class="s_ipt"]').send_keys("xpath中class定位")
3.xpath中的name定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
dx.find_element_by_xpath('//*[@name="wd"]').send_keys("xpath中name定位")
4.xpath中的标签名定位
5.xpath中其他元素定位
6.xpath中的组合属性定位
7.xpath中的层级定位
上一层//*[@id="form"]/span[1]
下一层//*[@id="form"]/span[1]/input[1]
层级(上一级) xpth=//*[@id="form"]
层级(上两级) xpth=//*[@id="form"]/span[1]/input[1]
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
#dx.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys("层级定位")
# dx.find_element_by_xpath('//*[@autocomplete="off" and @id="kw" ]').send_keys('xpath中的组合属性定位')
# dx.find_element_by_xpath("//*[@autocomplete='off']").send_keys('xpath中其他属性定位')
# dx.find_element_by_xpath('//input[@id="kw"]').send_keys("xpath中的标签定位")
# dx.find_element_by_xpath('//*[@class="s_ipt"]').send_keys("xpath中class定位")
二、css
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
dx.find_element_by_css_selector("[autocomplete='off']").send_keys("css中其他属性定位.")
# dx.find_element_by_css_selector("[name='wd']").send_keys("css中name的全称定位.")
# dx.find_element_by_css_selector("[class='s_ipt']").send_keys("css中class的全称定位.")
# dx.find_element_by_css_selector(".s_ipt").send_keys("css中class的简写定位.")
# dx.find_element_by_css_selector("[id='kw']").send_keys("css中id的全称定位#")
# dx.find_element_by_css_selector("#kw").send_keys("css中id简写定位#")
#dx.find_element_by_css_selector("[autocomplete='off'][name='wd']").send_keys("css中组合属性定位.")
层级定位:
上一级:#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap
上两级:#form
a、上一级定位
from selenium import webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
dx.find_element_by_css_selector("#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap>input").send_keys("css中上一级定位"
b、上两级
#form > 下一级> 下两级
定位方法中,优先顺序
1)有id优先使用id定位
2)没有id,考虑使用name或者class定位。
3)如果没有id,name,class再考虑用xpath,css定位。
4)如果是链接可以考虑使用link_text,partial_link_text 定位。
5)tag_name和JavaScript还是用的比较少的
版权归原作者 AgostoDu 所有, 如有侵权,请联系我们删除。