WebDriver_常用API操作技巧(下)

WebDriver_常用API操作技巧(下)

断言页面源码中的关键字

目的: 确定所加载的页面是否出现了预期内容
用于测试的网址: http://www.baidu.com

import time  
from selenium import webdriver
driver = webdriver.Chrome()   
driver.get('http://www.baidu.com')  
driver.find_element_by_id("kw").send_keys("软达启航")
driver.find_element_by_id("su").click()
time.sleep(3)
assert "软达启航" in driver.page_source, "页面源码中不存在该关键字"
driver.close()
对当前浏览器窗口截屏

目的: 通过截屏保存当前缺陷状态
用于测试的网址: http://www.sogou.com

import time  
from selenium import webdriver
from time import strftime, localtime
from datetime import datetime
driver = webdriver.Chrome()   
driver.get('http://www.sogou.com')  
result1 = driver.get_screenshot_as_file("c:\screenPicture.png")
driver.get_screenshot_as_file("D:/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
print(datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
result2 = driver.get_screenshot_as_base64()
result3 = driver.get_screenshot_as_png()
print(result1)
driver.close()
对当前浏览器窗口截屏

目的: 通过截屏保存当前缺陷状态
用于测试的网址: http://www.sogou.com

import time  
from selenium import webdriver
from time import strftime, localtime
from datetime import datetime
driver = webdriver.Chrome()   
driver.get('http://www.sogou.com')  
result1 = driver.get_screenshot_as_file("c:\screenPicture.png")
driver.get_screenshot_as_file("D:/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
print(datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
result2 = driver.get_screenshot_as_base64()
result3 = driver.get_screenshot_as_png()
print(result1)
driver.close()

截图方法:
1.get_screenshot_as_file(self, filename)–这个方法是获取当前window的截图,出现IOError时候返回False,截图成功返回True。
filename参数是保存文件的路径。
Usage:
driver.get_screenshot_as_file(’/Screenshots/foo.png’)

2.get_screenshot_as_base64(self)
–这个方法也是获取屏幕截图,保存的是base64的编码格式,在HTML界面输出截图的时候,会用到。
比如,想把截图放到html测试报告里。
Usage:
driver.get_screenshot_as_base64()

3.get_screenshot_as_png(self)
–这个是获取屏幕截图,保存的是二进制数据,很少用到.
Usage:
driver.get_screenshot_as_png()

拖拽页面元素

目的: 模拟鼠标在页面上拖拽效果
用于测试的网址: http://jqueryui.com/resources/demos/draggable/scroll.html

import time  
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()   
driver.get('http://jqueryui.com/resources/demos/draggable/scroll.html')  
onePosition = driver.find_element_by_id("draggable")
twoPosition = driver.find_element_by_id("draggable2")
sanPosition = driver.find_element_by_id("draggable3")
action_chains = ActionChains(driver)
action_chains.drag_and_drop(onePosition, twoPosition).perform()
for i in range(5):
    action_chains.drag_and_drop_by_offset(sanPosition, 10, 10).perform()
    time.sleep(2)
driver.close()
模拟键盘单个按键操作

目的: 模拟浏览器上单个按键操作
用于测试的网址: http://www.sogou.com

import time  
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()   
driver.get('http://www.sogou.com')
query = driver.find_element_by_id("query")
query.send_keys(Keys.F12)
time.sleep(3)
query.send_keys(Keys.F12)
query.send_keys("selenium")
query.send_keys(Keys.ENTER)
time.sleep(3)
driver.close()
模拟组合按键操作

目的: 模拟组合按键操作
用于测试的网址: http://www.baidu.com

#通过WebDriver内置模块模拟
import time  
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()   
driver.get('http://www.baidu.com')
input = driver.find_element_by_id("kw")
input.click()
input.send_keys("selenium")
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').\
key_up(Keys.CONTROL).perform()
driver.find_element_by_id("su").click()
driver.close()
模拟鼠标右键

目的: 模拟浏览器上鼠标右键操作
用于测试的网址: http://www.baidu.com

#通过WebDriver内置模块模拟
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.maximize_window()
driver.get('https://www.baidu.com')
time.sleep(2)

element = driver.find_element_by_xpath(".//*[@id='lg']/img")
actionChains = ActionChains(driver)
actionChains.context_click(element).send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()

ActionChains方法列表

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) ——鼠标移动到某个元素

模拟鼠标左键按下与释放

目的: 模拟鼠标单击操作
用于测试的网址: http://127.0.0.1/left_down.html

import time
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/left_down.html')
div = driver.find_element_by_id("div1")
test = ActionChains(driver)
test.click_and_hold(div).perform()
time.sleep(2)
test.release(div).perform()
time.sleep(2)
driver.close()
保持鼠标悬停在某个元素上

目的: 模拟在网页链接上悬浮鼠标
用于测试的网址: http://127.0.0.1/xuan_fu.html

import time
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/xuan_fu.html')
link1 = driver.find_element_by_partial_link_text("指向1")
link2 = driver.find_element_by_partial_link_text("指向2")
p = driver.find_element_by_xpath("//p")
print(link1.text,link2.text)
test = ActionChains(driver)
test.move_to_element(link1).perform()
time.sleep(2)
test.move_to_element(p).perform()
time.sleep(2)
driver.close()
判断页面元素是否存在

目的: 通过对页面元素的存在与否判断执行结果
用于测试的网址: http://www.sogou.com

def is_ele_find(by,value):
    from selenium.common.exceptions import NoSuchElementException
    try:
        check = driver.find_element(by=by, value=value)
    except NoSuchElementException as e:
        return False
    else:
        return True
import time  
from selenium import webdriver

driver = webdriver.Chrome()   
driver.get('http://www.sogou.com')
res = is_ele_find('id','query')
print(res)
if res is True:
    print("查到了")
else:
    print('没找到')
driver.close()
隐式等待

目的: 浏览器加载页面时的智能等待
用于测试的网址: http://www.sogou.com
注意事项: 隐式等待只需设置一次,它将在driver整个生命周期中都起作用。
弊端: 会等待所有内容加载完成后才会进行下一步。

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.sogou.com')
driver.implicitly_wait(10)
#time.sleep(10)
driver.close()
显示等待

目的: 等待设置元素固定时间
用于测试的网址: http://www.sogou.com、http://www.baidu.com

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/xian_shi.html')
wait = WebDriverWait(driver,10,0.2)
print(driver.title)
wait.until(EC.title_is('你喜欢的水果'))
element = WebDriverWait(driver,10).until\
    (lambda x: x.find_element_by_xpath\
    ('//input[@value="Display alert box"]'))
element.click()
alert = wait.until(EC.alert_is_present())
print(alert.text)
driver.close()
使用Title属性识别和操作新窗口

目的: 通过title属性判断实际结果
用于测试的网址: http://127.0.0.1/title.html

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/title.html')
wait = WebDriverWait(driver,10,0.2)
wait.until(EC.element_to_be_clickable\
           ((By.LINK_TEXT,'sogou搜索'))).click()
all_handles = driver.window_handles
print(driver.current_window_handle,len(all_handles))
if len(all_handles)>0:
    for windowHandle in all_handles:
        driver.switch_to_window(windowHandle)
        print(driver.title)
        if driver.title == "搜狗搜索引擎  - 上网从搜狗开始":
            wait.until(lambda x: x.find_element_by_id('query')).\
            send_keys('首页的浏览器窗口被找到了')
            time.sleep(2)
driver.close()
通过页面关键内容操作新窗口

目的: 通过页面内容判断实际结果
用于测试的网址: http://127.0.0.1/title.html

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/title.html')
wait = WebDriverWait(driver,10,0.2)
wait.until(EC.element_to_be_clickable\
           ((By.LINK_TEXT,'sogou搜索'))).click()
all_handles = driver.window_handles
print(driver.current_window_handle,len(all_handles))
if len(all_handles)>0:
    for windowHandle in all_handles:
        driver.switch_to_window(windowHandle)
        pageSource = driver.page_source
        if "搜狗搜索" in pageSource:
            wait.until(lambda x: x.find_element_by_id('query')).\
            send_keys('首页的浏览器窗口被找到了')
            time.sleep(2)
driver.close()
操作Frame中的页面元素

目的: 在多frame页面上操作切换的方法
用于测试的网址: http://127.0.0.1/frameset1/frameset.html

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/frameset1/frameset.html')
driver.switch_to.frame(0)
wait = WebDriverWait(driver,10,0.2)
leftText = driver.find_element_by_xpath('//p')
print(leftText.text)
#driver.find_element_by_tag_name('input').click()
#alertWindow = wait.until(EC.alert_is_present())
#print(alertWindow.text)
driver.switch_to_default_content()#回到默认
driver.switch_to.frame(driver.find_elements_by_tag_name('frame')[1])
driver.find_element_by_tag_name('input').send_keys('我在中间')
driver.switch_to_default_content()
driver.switch_to.frame(driver.find_element_by_id('rightframe'))
driver.find_element_by_id('python').click()
driver.switch_to_default_content()
time.sleep(3)
driver.close()
使用Frame中的HTML源码操作

目的: 使用Frame页面的HTML源码定位指定的Frame页面并进行操作
用于测试的网址: http://127.0.0.1/frameset1/frameset.html

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/frameset1/frameset.html')
framesList = driver.find_elements_by_tag_name('frame')
for frame in framesList:
    driver.switch_to.frame(frame)
    if '中间frame' in driver.page_source:
        p = driver.find_element_by_xpath('//p')
        print(p.text)
        driver.switch_to_default_content()
        break
    else:
        driver.switch_to_default_content()
driver.close()
操作Iframe中的页面元素

目的: 对于frame上的二级iframe的操作
用于测试的网址: http://127.0.0.1/frameset2/frameset.html
注意事项: 若要进入二级iframe,需要先进入frame,然后再依次进入。
无论进入几层,只需一个switch_to_default_content()就能退回到顶层frameset页面

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/frameset2/frameset.html')
driver.switch_to.frame(0)
if '左侧' in driver.page_source:
    print('找到左侧frame页面')
driver.switch_to.frame(driver.find_element_by_id('showIframe'))
if 'iframe' in driver.page_source:
    print('找到左侧frame页面里的iframe')
driver.switch_to_default_content()
if 'frameset页面' == driver.title:
    print('找到外部frameset页面')
driver.close()
操作JavaScript的Alert弹窗

目的: 模拟鼠标单击弹出的Alert窗口上的确定按钮
用于测试的网址: http://127.0.0.1/alert.html

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/alert.html')
button = driver.find_element_by_id('button')
button.click()
alert = driver.switch_to_alert()
time.sleep(2)
if alert.text == '这是一个alert弹窗':
    print('OK')
else:
    print('fail')
alert.accept()
driver.close()
操作JavaScript的confirm弹窗

目的: 模拟鼠标单击弹出confirm窗口上的确定和取消按钮
用于测试的网址: http://127.0.0.1/confirm.html

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/confirm.html')
button = driver.find_element_by_id('button')
button.click()
alert = driver.switch_to_alert()
time.sleep(2)
if alert.text == '这是一个confirm弹窗':
    print('OK')
else:
    print('fail')
alert.accept()
time.sleep(2)
driver.close()
操作JavaScript的confirm弹窗

目的: 能在prompt弹窗中输入自定义内容,并单击确定按钮
用于测试的网址: http://www.sogou.com

import time
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://127.0.0.1/prompt.html')
button = driver.find_element_by_id('button')
button.click()
alert = driver.switch_to_alert()
time.sleep(2)
alert.send_keys('早睡早起身体好')
if alert.text == '这是一个prompt弹窗':
    print('OK')
else:
    print('fail')
alert.accept() #alert.dismiss()
driver.close()
操作浏览器的Cookie

目的: 操作浏览器cookie里的相关信息
用于测试的网址: http://www.sogou.com

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.sogou.com')
cookies = driver.get_cookies()
for cookie in cookies:
    print("%s > %s > %s > %s > %s" \
          %(cookie['domain'],cookie['name'],\
            cookie['value'],cookie['expiry'],\
            cookie['path']))
            ck = driver.get_cookie('SUV')
#driver.delete_cookie('ABTEST')
#driver.delete_all_cookies()
driver.add_cookie({'name':'laohu','value':'1234'})
cook = driver.get_cookie('laohu')
print(cook)
driver.close()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值