在学习博客园“叁藏法师”老师的《自动化测试基础篇--Selenium文件上传send_keys》文章后,根据内容也编写了一遍代码,并根据个人理解不同,更新了一下。实现以下几个功能:
1.登录。(滑动验证,仍然需要手动)
2.隐式等待方法
3.为避免博客标题重复,使用了datetime模块
4.博客园上传图片是input控件,所以用send_keys即可上传图片
5.上传图片的控件是新弹窗,所以需要用到iframe切换
6.部分定位Xpath,使用//进行了精简
7.最后进行了简单断言。
from selenium import webdriver
import time
from datetime import datetime
url = 'https://www.cnblogs.com/wangpapa/'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
driver.implicitly_wait(10)
# 点击左侧按钮“新随笔”
add_blog = driver.find_element_by_id('blog_nav_newpost')
add_blog.click()
driver.implicitly_wait(10)
# 输入账号密码,并手动进行验证
username = driver.find_element_by_id("LoginName")
username.send_keys("账号")
password = driver.find_element_by_id("Password")
password.send_keys("密码")
login_button = driver.find_element_by_id("submitBtn")
login_button.click()
driver.implicitly_wait(20)
# 生成当前时间,防止博客标题重复
now_time = str(datetime.now())
# 输入标题
blog_title = driver.find_element_by_id("post-title")
blog_title.send_keys("测试:博客标题" + now_time)
# 点击富文本的按钮“上传图片”
driver.find_element_by_xpath('//*[@id="Editor_Edit_EditorBody_uploadImage"]/span[1]/img').click()
driver.implicitly_wait(10)
# 切换到弹窗的iframe
driver.switch_to.frame("mce_38_ifr")
# 因为是input控件,所以直接用send_keys方法
driver.find_element_by_name('file').send_keys("D:/3.jpg")
# 点击按钮“保存草稿”。原始xpath地址很长,用//精简了一些
driver.find_element_by_xpath("//div[2]/div[3]/div[2]//button[2]").click()
# 验证博客是否添加成功
Prompting = driver.find_element_by_xpath('//div[2]/div[3]/div[2]//cnb-post-saved-info/div[1]/div')
if Prompting.text == "保存成功":
print("博客添加成功!")
else:
print("博客添加失败。。。")
driver.quit()