做网站的服务器多少钱,学跨境电商要多少钱,wordpress vendor,免费的英文电子外贸网站建设1.鼠标定位操作鼠标悬停#xff0c;即当光标与其名称表示的元素重叠时触发的事件#xff0c;在 Selenium 中将键盘鼠标操作封装在 Action Chains 类中。Action Chains 类的主要应用场景为单击鼠标、双击鼠标、鼠标拖曳等。部分常用的方法使用分类如下#xff1a;• click(on…1.鼠标定位操作鼠标悬停即当光标与其名称表示的元素重叠时触发的事件在 Selenium 中将键盘鼠标操作封装在 Action Chains 类中。Action Chains 类的主要应用场景为单击鼠标、双击鼠标、鼠标拖曳等。部分常用的方法使用分类如下• click(on_elementNone)模拟鼠标单击操作。• click_and_hold(on_elementNone)模拟鼠标单击并且按住不放。• double_click(on_elementNone)模拟鼠标双击。• context_click(on_elementNone)模拟鼠标右击操作。• drag_and_drop(source,target)模拟鼠标拖曳。• drag_and_drop(source,xoffset,yoffset)模拟将目标拖曳到目标位置。• key_down(value,elementNone)模拟按住某个键实现快捷键操作。• key_up(value,elementNone)模拟松开某个键一般和 key_down 操作一起使用。• move_to_element(to_element)模拟将鼠标移到指定的某个页面元素。• move_to_element_with_offset(to_element,xoffset,yoffset)移动鼠标至指定的坐标。• perform()将之前一系列的 ActionChains 执行。• release(on_elementNone)释放按下的鼠标。接下来列举鼠标右击操作和鼠标双击操作两个实例。1鼠标右击操作实现右击/双击百度首页“新闻”超链接。代码如下# _*_ coding:utf-8 _*_name:zhangxingzai
date:2023/2/16
form:《Selenium 3Python 3自动化测试项目实战》
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChainsdriver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 定位超链接‘新闻’
element driver.find_element(By.LINK_TEXT, 新闻)
# 实现在新闻超链接上右击
ActionChains(driver).context_click(element).perform()
# 实现用鼠标实现双击‘新闻’
ActionChains(driver).double_click(element).perform()2以百度首页设置为例使用“move_to_element”的方法鼠标即可悬停于元素设置from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChainsdriver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 通过id定位超链接‘设置’
setting driver.find_element(By.ID, s-usersetting-top)
# 使用方法 move_to_element 模拟将鼠标悬停在超链接“设置”处
ActionChains(driver).move_to_element(setting).perform()
# 定位超链接‘高级设置’并实现单击操作
driver.find_element(By.CLASS_NAME, set).click()实现效果如下2.Select 操作Web 页面中经常会遇到下拉框选项Select 模块提供了对标准 Select 下拉框的多种操作方法。打开百度单击“设置→高级设置”会出现一个 Select 下拉框如下图所示Select 元素的 HTML 代码如下图所示。接下来介绍 3 种选择 Select 元素的值的方法。Select 类用于定位select标签。select_by_value()通过 value 值定位下拉选项。select_by_visible_text()通过 text 值定位下拉选项。select_by_index()根据下拉选项的索引进行选择。第一个选项为 0第二个选项为 1。通过 WebDriver 代码操作下拉框代码如下from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.support.select import Selectdriver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 定位超链接‘设置’
setting driver.find_element(By.ID, s-usersetting-top)
# 使用方法 move_to_element 模拟将鼠标悬停在超链接“设置”处
ActionChains(driver).move_to_element(setting).perform()
# 通过xpath定位超链接‘高级’并实现单击操作
driver.find_element(By.XPATH, //div/a[target_blank]/span).click()
# 通过class定位选择‘全部时间’
search_time driver.find_element(By.CLASS_NAME, c-select-selection)
# 通过 value 值定位下拉选项
Select(search_time).select_by_value(stf1676475129.442,1676561529.442|stftype1)
# 通过 text 值定位下拉选项
Select(search_time).select_by_visible_text(最近一周)3.键盘操作前面介绍过send_keys()方法可以用来模拟键盘输入我们还可以用它来输入键盘上的按键甚至是组合键如 Ctrla、Ctrlc 等。经过总结以下为自动化测试中常用的键盘事件。• Keys.BACK_SPACE删除键。• Keys.SPACE空格键。• Keys.TABTab 键。• Keys.ESCAPE回退键。• Keys.ENTER回车键。• Keys.CONTROL,”a”组合键 Ctrl A。• Keys.CONTROL,”x”组合键 Ctrl X。• Keys.CONTROL,”v”组合键 Ctrl V。• Keys.CONTROL,”c”组合键 Ctrl C。• Keys.F1F1 键。• Keys.F12F12 键。用法举例如下方代码展示from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleepdriver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 在输入框输入内容
driver.find_element(By.ID, kw).send_keys(selenium)
# 删除多输入的一个 m
driver.find_element(By.ID, kw).send_keys(Keys.BACK_SPACE)
sleep(1)
# 输入空格键“教程”
driver.find_element(By.ID, kw).send_keys(Keys.SPACE)
driver.find_element(By.ID, kw).send_keys(教程)
sleep(1)
# 输入组合键 Ctrla全选输入框内容
driver.find_element(By.ID, kw).send_keys(Keys.CONTROL, a)
sleep(1)
# 输入组合键 Ctrlx剪切输入框内容
driver.find_element(By.ID, kw).send_keys(Keys.CONTROL, x)
sleep(1)
# 输入组合键 Ctrlv粘贴内容到输入框
driver.find_element(By.ID, kw).send_keys(Keys.CONTROL, v)
sleep(1)
# 用回车键代替单击操作
driver.find_element(By.ID, su).send_keys(Keys.ENTER)4.利用 JavaScript 操作页面元素WebDiver 对部分浏览器上控件并不是直接支持的如浏览器右侧滚动条、副文本等而是通常借助 JavaScript 间接操作。WebDriver 提供了 execute_script()和 execute_async_scrip()两种方法来执行 JavaScript 代码其区别如下1execute_script 为同步执行且执行时间较短。WebDriver 会等待同步执行的结果然后执行后续代码。2execute_async_script 为异步执行且执行时间较长。WebDriver 不会等待异步执行代码的结果而是直接执行后续的代码。用于调整浏览器滚动条位置的 JavaScript 代码如下。!-- window.scrollTo(左边距,上边距); --
window.scrollTo(0,450);window.scrollTo()方法用于设置浏览器窗口滚动条的水平位置和垂直位置。第一个参数表示水平的左边距第二个参数表示垂直的上边距代码如下。from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleepdriver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 设置浏览器窗口大小
driver.set_window_size(800, 700)
driver.find_element(By.ID, kw).send_keys(selenium)
driver.find_element(By.ID, su).click()
sleep(3)
# 通过 JavaScript 设置浏览器窗口的滚动条位置
js window.scrollTo(100,300)
driver.execute_script(js)执行结果如下图所示5.获得验证信息在进行 Web 自动化测试中用得最多的几种验证信息是 title、current_url 和 text。title用于获取当前页面的标题。current_url用于获取当前页面的 URL。text用于获取当前页面的文本信息。下面仍以百度搜索为例对比搜索前后的信息。from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleepdriver webdriver.Firefox()
driver.get(https://www.baidu.com/)print(Before search)
# 打印当前页面 title
title driver.title
print(title: title)# 打印当前页面 URL
now_url driver.current_url
print(URL: now_url)driver.find_element(By.ID, kw).send_keys(selenium)
driver.find_element(By.ID, su).click()
sleep(3)print(After search)
# 再次打印当前页面 title
title driver.title
print(title: title)
# 再次打印当前页面 URL
now_url driver.current_url
print(URL: now_url)# 获取搜索结果条数
num driver.find_element(By.XPATH, //span[classhint_PIwZX c_font_2AD7M]).text
print(result:num)运行结果如下通过上面的打印信息可以看出搜索前后的差异这些差异信息可以拿来作为自动化测试的断言点。6.设置元素等待WebDriver 提供了两种类型的元素等待显式等待和隐式等待。1显示等待显式等待是 WebDriver 等待某个条件成立则继续执行否则在达到最大时长时抛出超时异常TimeoutException。from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver webdriver.Firefox()
driver.get(https://www.baidu.com)element WebDriverWait(driver, 5, 0.5).until(EC.visibility_of_element_located((By.ID, kw)))
element.send_keys(selenium)WebDriverWait 类是 WebDriver 提供的等待方法。在设置时间内默认每隔一段时间检测一次当前页面元素是否存在如果超过设置时间仍检测不到则抛出异常。具体格式如下。driver浏览器驱动。timeout最长超时时间默认以秒为单位。poll_frequency检测的间隔步长时间默认为 0.5s。ignored_exceptions超时后的异常信息默认情况下抛出 NoSuchElementException异常。WebDriverWait()一般与 until()或 until_not()方法配合使用下面是 until()和 until_not()方法的说明until(method, message″)调用该方法提供的驱动程序作为一个参数直到返回值为 True。until_not(method, message″)调用该方法提供的驱动程序作为一个参数直到返回值为 False。在本例中通过 as 关键字将 expected_conditions 重命名为 EC并调用 presence_of_element_located()方法判断元素是否存在。expected_conditions 类提供的预期条件判断方法如下图所示。除 expected_conditions 类提供的丰富的预期条件判断方法外还可以利用is_displayed()方法自己实现元素显示等待。from time import sleep, ctime
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Firefox()
driver.get(https://www.baidu.com)
print(ctime())for i in range(10):try:el driver.find_element(By.ID, kw22)if el.is_displayed():breakexcept:passsleep(1)
else:print(time out)
print(ctime())相对来说这种方式更容易理解。首先 for 循环 10 次然后通过 is_displayed()方法循环判断元素是否可见。如果为 True则说明元素可见执行 break 跳出循环否则执行 sleep()休眠 1s 后继续循环判断。10 次循环结束后如果没有执行 break则执行 for 循环对应的else 语句打印“time out”信息。这里故意将 id 定位设置为“kw22”定位失败执行结果如下2隐式等待WebDriver 提供的 implicitly_wait()方法可用来实现隐式等待用法相对来说要简单得多。from time import ctime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementExceptiondriver webdriver.Firefox()
# 设置隐式等待为 10s
driver.implicitly_wait(10)
driver.get(https://www.baidu.com)
try:print(ctime())driver.find_element(By.ID, kw22).send_keys(selenium)
except NoSuchElementException as e:print(e)
finally:print(ctime())implicitly_wait()的参数是时间单位为秒本例中设置的等待时间为 10s。首先这10s 并非一个固定的等待时间它并不影响脚本的执行速度。其次它会等待页面上的所有元素。当脚本执行到某个元素定位时如果元素存在则继续执行如果定位不到元素则它将以轮询的方式不断地判断元素是否存在。假设在第 6s 定位到了元素则继续执行若直到超出设置时间10s还没有定位到元素则抛出异常。这里同样故意将 id 定位设置为“kw22”定位失败执行结果如下7.警告框处理在 WebDriver 中处理 JavaScript 生成的 alert、confirm 和 prompt 十分简单具体做法是首先使用 switch_to.alert()方法定位然后使用 text、accept、dismiss、send_keys 等进行操作。text返回 alert、confirm、prompt 中的文字信息。accept()接受现有警告框。dismiss()解散现有警告框。send_keys()在警告框中输入文本如果可以输入的话。这里以百度搜索设置为例打开百度搜索设置设置完成后单击“保存设置”按钮可以使用 switch_to.alert()方法为百度搜索设置弹窗如下图所示代码如下from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChainsdriver webdriver.Firefox()
driver.get(https://www.baidu.com/)
# 定位超链接‘设置’
setting driver.find_element(By.ID, s-usersetting-top)
# 使用方法 move_to_element 模拟将鼠标悬停在超链接“设置”处
ActionChains(driver).move_to_element(setting).perform()
# 通过class定位超链接‘搜索设置’并实现单击操作
driver.find_element(By.CLASS_NAME, set).click()
# 通过xpath获取保存设置
driver.find_element(By.XPATH, //a[classprefpanelgo setting-btn c-btn c-btn-primary]).click()
sleep(3)# 获取警告框
alert driver.switch_to.alert
# 获取警告框提示信息
alert_text alert.text
print(alert_text)
# 接取警告框
alert.accept()8.获取Cookie有时我们需要验证浏览器中的 Cookie 是否正确因为基于真实的 Cookie 是无法通过白盒测试和集成测试的。WebDriver 提供了操作 Cookie 的相关方法可以读取、添加和删除 Cookie。WebDriver 操作 Cookie 的方法如下get_cookies()获得所有 Cookie。get_cookie(name)返回字典中 key 为“name”的 Cookie。add_cookie(cookie_dict)添加 Cookie。delete_cookie(name,optionsString)删除名为 OpenString 的 Cookie。delete_all_cookies()删除所有 Cookie。下面通过 get_cookies()获取当前浏览器的所有 Cookie。代码如下from selenium import webdriverdriver webdriver.Firefox()
driver.get(https://www.baidu.com/)
# 获得所有 Cookie 信息并打印
cookie driver.get_cookies()
print(cookie)执行结果如下从执行结果可以看出Cookie 中的数据是以字典形式存放的。知道了 Cookie 中数据的存放形式后即可按照这种形式向浏览器中添加 Cookie。from selenium import webdriverdriver webdriver.Firefox()
driver.get(https://www.baidu.com/)# 添加 Cookie 信息
driver.add_cookie({name: foo, value: bar})
# 遍历指定的 Cookies
for cookie in driver.get_cookies():print(%s - %s % (cookie[name], cookie[value]))执行结果如下从执行结果可以看出最后一条 Cookie 是在脚本执行过程中通过 add_cookie()方法添加的。通过遍历得到所有的 Cookie从而找到字典中 key 为“name”和“value”的 Cookie值。delete_cookie() 和 delete_all_cookies() 方法的使用也很简单前者通过 name 删除一个指定的 Cookie后者直接删除浏览器中的所有 Cookies。9.窗口截图自动化测试用例是由程序执行的因此有时候打印的错误信息不够直观。如果在脚本执行出错时能够对当前窗口进行截图并保存那么通过截图就可以非常直观地看到脚本出错的原因。WebDriver 提供了截图函数 save_screenshot ()可用来截取当前窗口。from time import sleep
from selenium import webdriverdriver webdriver.Firefox()
driver.get(https://www.baidu.com/)
sleep(3)# 截取当前窗口指定截图图片的保存位置
driver.save_screenshot(D:/baidu_img.png)WebDriver 建议使用 png 作为图片的后缀名。脚本运行完成后会在D盘根目录下生成 baidu_img.png 图片这样我们就学习完大部分Selenium 的特殊元素操作方法了读者可以掌握 Selenium 的常用方法包括熟悉每种方法使用的场景或者前提条件。