selenium自动化测试基础

基本语法(基于python语言)

 

from selenium import webdriver  导入工具包 

driver = webdriver.Chrome  启动浏览器

driver.get(" https://www.baidu.cm/ ")  打开百度

driver.set_window_size(800,300)  设定特定大小

driver.maximize_window()  最大化

driver.get_screenshot_as_file  截图

time.sleep()  等待时间

driver.refesh()  刷新

采用class进行定位,且当class 相同时,利用索引值【1】以及在element+s 进行定位

下面为同学总结复习参考

模块语法释义实例
导入工具包from selenium import webdriver从selenium中导入webdriver工具包from selenium import webdriver
浏览器相关webdriver.Chrome()需要将控制的webdriver的Firefox赋值给浏览器对象;获得了浏览器对象才可以启动浏览器browser = webdriver.Chrome()
.get("http://www.baidu.com")通过 get()方法,可以向浏览器发送网址browser.get("www.baidu.com")
.quit()退出并关闭窗口的每一个相关的驱动程序browser.quit()
.maximize_window()将浏览器最大化显示browser.maximize_window()
.set_window_size(480, 800)设置浏览器宽480、高800显示browser.set_window_size(480, 800)
.back()浏览器的返回(后退)功能browser.back()
.forward()浏览器的前进功能browser.forward()
.size返回元素的尺寸size=driver.find_element_by_id("kw").size
.text获取元素的文本text=driver.find_element_by_id("cp").text
.get_attribute('type')获得属性值attribute=driver.find_element_by_id("kw").get_attribute('type')
.is_displayed()设置该元素是否用户可见result=driver.find_element_by_id("kw").is_displayed()
.get_screenshot_as_file()截浏览器窗体driver.get_screenshot_as_file('./pic/append.png')  #有弹窗alert不能截图
鼠标事件.clear()清除元素的内容,如果可以的话browser.find_element_by_id("user_name").clear()
.send_keys()在元素上模拟按键输入browser.find_element_by_id("user_name").send_keys("username")
.click()单击元素browser.find_element_by_id("dl_an_submit").click()
.submit()提交表单browser.find_element_by_id("dl_an_submit").submit()
ActionChains 类鼠标操作的常用方法:from selenium.webdriver.common.action_chains import ActionChains
context_click()右击ActionChains(driver).context_click("xxx").perform()
double_click()双击ActionChains(driver).double_click("xxx").perform()
drag_and_drop(source, target)在源元素上按下鼠标左键,然后移动到目标元素上释放。
source: 鼠标按下的源元素。
target: 鼠标释放的目标元素。
ActionChains(driver).drag_and_drop(element, target).perform()
move_to_element()鼠标悬停在一个元素上ActionChains(driver).move_to_element("xxx").perform()
click_and_hold()按下鼠标左键在一个元素上ActionChains(driver).click_and_hold("xxx").perform()
perform()ActionChains 用于生成用户的行为;所有的行为都存储在 actionchains 对象。通过 perform()执行
存储的行为。
 
元素定位find_element_by_id()通过id查找元素browser.find_element_by_id("xxx")
find_element_by_name()通过name查找元素browser.find_element_by_name("xxx")
find_element_by_class_name()通过class查找元素browser.find_element_by_class_name("xxx")
find_element_by_tag_name()通过tag查找元素browser.find_element_by_tag_name("xxx")
find_element_by_link_text()适用于文字链接的定位(整个文字)browser.find_element_by_link_text("xxx")
find_element_by_partial_link_text()适用于文字链接的定位(部分文字)browser.find_element_by_partial_link_text("xxx")
find_element_by_xpath() browser.find_element_by_xpath()
find_element_by_css_selector() browser.find_element_by_css_selector()
键盘事件webdriver 的 Keys()类提供键盘上所有按键的操作,甚至可以模拟一些组合建的
操作,如 Ctrl+A ,Ctrl+C/Ctrl+V
from selenium.webdriver.common.keys import Keys引入 Keys 类包
send_keys(Keys.BACK_SPACE)删除键(BackSpace) 
send_keys(Keys.SPACE)空格键(Space) 
send_keys(Keys.TAB)制表键(Tab) 
send_keys(Keys.ESCAPE) 回退键(Esc) 
send_keys(Keys.ENTER)回车键(Enter) 
send_keys(Keys.CONTROL,'a')全选(Ctrl+A) 
send_keys(Keys.CONTROL,'c')复制(Ctrl+C) 
send_keys(Keys.CONTROL,'x')剪切(Ctrl+X) 
send_keys(Keys.CONTROL,'v')粘贴(Ctrl+V) 
时间等待处理sleep()强制等待time.sleep(10)
implicitly_wait()这个等待的时间是不固定的,最长的等待也莫过于我们设置的最大值driver.implicitly_wait(10)
WebDriverWait(driver,10,1)每1秒轮查一次,超时时间为10秒,超出报异常,配合until()和until_not()方法一起使用WebDriverWait(driver,10,1).until(methon)
下拉滚动条方法target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
窗口切换driver.switch_to_window(driver.window_handles[1])
alert\confirm\prompt 弹出框操作.switch_to.alert获取alert对象alert = driver.switch_to.alert
.text获取alert对象中的文本信息alert.text
.dismiss()点击取消或【X】(如果有的话)alert.dismiss()
.accept()点击确认按钮alert.accept()
.send_keys()输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。alert.send_keys()
嵌套iframedriver.switch_to.frame() 用frame的index来定位,第一个是0driver.switch_to.frame(0) 
用id来定位driver.switch_to.frame("frame1")
用name来定位driver.switch_to.frame("myframe")
用WebElement对象来定位driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.switch_to.parent_frame()从子iframe切到父iframe 
lambdalambda函数是匿名的
lambda函数有输入和输出
lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y

 

xpath
一、xpath主要用于路径定位,定位所需要的元素的位置,从而展开操作
1、如果要根据绝对路径的话,则使用单斜杠(/),并且每个层级的路径要正确:
<html class="w3c">
<body>
  <div class="page-wrap">
  <div id="hd" name="q">
    <form target="_self" action="http://www.so.com/s">
       <span id="input-container">
          <input id="input" type="text" x-webkit-speech="" autocomplete="off"
2、如果要根据相对路径的话,则使用双斜杠(//),并且注意每一个层级是相对还是绝对:
   :find_element_by_xpath("//input[@id=’input’]") #通过自身的 id 属性定位
   :find_element_by_xpath("//span[@id=’input-container’]/input") #通过上一级目录的id属性定位
   :find_element_by_xpath("//div[@id=’hd’]/form/span/input") #通过上三级目录的 id 属性定位
   :find_element_by_xpath("//div[@name=’q’]/form/span/input")#通过上三级目录的 name 属性定位
3、关于是否需要再路径中加入 @XXX ,视情况而定,如果要定位的同一层级的元素没有名称重复的,则不需要加@XXX;如果同一层级有元素名称重复的话,则需要添加@XXX来区分究竟是哪一个
4、xpath很灵活,可以在@里面做一些逻辑判断,例如://div[@id=’hd’ or @name=’q’]
5、xpath语法:
  <bookstore>
     <book>
       <title lang="eng">Harry Potter</title>
       <price>29.99</price>
     </book>

     <book>
       <title lang="eng">Learning XML</title>
       <price>39.95</price>
     </book>

  </bookstore>

1、/ 从根节点选取                                            :bookstore/book  选取bookstore 的子元素的所有book 元素                                 
  // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置:bookstore//book 选择bookstore 元素的后代的所有book 元素,不管它们bookstore之下的什么位置
  .  选取当前节点
  .. 选取当前节点的父节点
  @  选取属性                                                ://@lang  选取名为 lang 的所有属性
  [XXX]                                                      :/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素
                                                             :/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素
                                                             :/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素
                                                             :/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素
                                                             ://title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
                                                             :/bookstore/book[price>35.00]/title 选取 bookstore 元素中的book元素的所有title元素且其中
                                                                的price元素的值须大于35.00
 *   匹配任何元素节点                                        :/bookstore/*  选取 bookstore 元素的所有子元素
 @*  匹配任何属性节点                                        ://title[@*]   选取所有带有属性的 title 元素
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值