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"]')

操作下拉滚动条

参考:selenium操作下拉滚动条的几种方法

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?