4.1自动化测试
自动化工具、框架的选择
Selenium Webdriver
chrome_option.add_argument('--proxy-server=127.0.0.1:8080')
启动浏览器:webdriver.Chrome()
跳转网址:driver.get("网址")
检查页面
form selenium.webdriver.support import expected_conditions as EC
EC.title_contains("注册")
定位元素信息
find_element_by_id().send_keys()
find_elment_by_class_name("")
locator=(By.CLASS_NAME,'')
webDriverWait(driver,10).until(EC.visibility_of_element_located(locator))
driver.close()
等待元素消失时或出现时执行操作
使用expected_conditions模块中的方法
使用WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as EC
import selenium.webdriver.support.ui as ui
# 一直等待某元素可见,默认超时10秒
def is_visible(locator, timeout=10):
try:
ui.WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.XPATH, locator)))
return True
except TimeoutException:
return False
# 一直等待某个元素消失,默认超时10秒
def is_not_visible(locator, timeout=10):
try:
ui.WebDriverWait(driver, timeout).until_not(EC.visibility_of_element_located((By.XPATH, locator)))
return True
except TimeoutException:
return False
# 调用方法
is_not_visible('//input[@input="search-error"]')
操作下拉滚动条
1.直接操作页面 2.拖动到页面元素位置 3.发送PAGE_DOWN、END等键盘事件
webElement = webDriver.findElement(By.cssSelector("body"))
# 有的时候必须点击一下,下拉才能生效(有的网站是这样,原因未找到)
webElement.click()
#小幅度下拉
webElement.sendKeys(Keys.PAGE_DOWN)
#或者直接下拉到底
webElement.sendKeys(Keys.END)
4.
driver.execute_script("window.scrollBy(0,200)","") #向下滚动200px
driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","") #向下滚动到页面底部
设置下载文件存储路径
download.default_directory
:设置下载路径profile.default_content_settings.popups
:设置为0
禁止弹出窗口options = webdriver.ChromeOptions() prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'} options.add_experimental_option('prefs', prefs) driver = webdriver.Chrome(chrome_options=options)
查找下载的文件
import os
a = os.listdir("d:")
for i in a:
print(i)
快速消失弹框或toast的抓取
1.F12开发开发者工具
2.Network→online→add...→Add custom profile...
3.自定义网络流速(如:Download:1kb Upload:1kb Latency:10000ms)
4.勾选自定义的网络流速,进行通讯。这时,由于网路被限,弹框消失的速度也就慢了下来。
常见问题
1.ElementNotInteractableException: Message: Element is not visible
原因:浏览器窗口太小,导致元素不可见
解决方法:设置更大的浏览器宽度或全屏,若全屏幕任然无法显示信息,请操作滚动条
driver.set_window_size(620,600)
driver.maximize_window()
2.WebDriverException: Message: unknown error: Element is not clickable at point (). Other element would receive the click:
解决方法:设置等待时间或更改鼠标点击事件为键盘事件
time.sleep(2)
follow_button.send_keys("\n")
3.定位不到元素
原因:
定位元素的id会动态改变
定位元素在某一个frame里
解决方法:切换到frame中再定位。driver.switchTo().frame("{frame_name}")
不在同一个frame里边查找元素
解决方法:切换frame。driver.switchTo().frame("{frame_name}")切换到其他frame,driver.switchTo().defaultContent()切换会默认content
点击速度过快,页面还没有加载出需要的元素。
解决方法:设置等待时间。time.sleep({等待时间})或WebDriverWait().until()
firefox安全性强,不允许跨域调用出现报错
Last updated
Was this helpful?