1、点击单选按钮
本文介绍如何利用selenium中的方法去操作单选按钮(Radio Button)。
利用百度新闻页面两个单选按钮举例
默认是选择新闻全文,我试试在两者之前来回点击。
实际上,勾选一个单选按钮,也就是调用元素方法click()
我们利用for语句遍历这两个单选按钮,依次点击他们。
脚本代码如下:
# coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://news.baidu.com')
driver.implicitly_wait(8)
for i in driver.find_elements_by_xpath("//*/input[@type='radio']"):
i.click()
2、点击复选框
本文介绍Selenium中,如何操作复选 框-Checkbox,最终的方法还是click()。
本来想还是继续采用for语句来把所有的复选框勾选一遍,例如这样的场景:注册一个网站勾选身份或者职业的时候,由于没有找到合适的demo网站。这里还是以百度举例,登录时,勾选下次自动登录:
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
driver.implicitly_wait(8)
driver.find_element_by_xpath("//*[@id='u1']/a[7]").click()
time.sleep(1)
driver.find_element_by_xpath("//*[@name='memberPass']").click()
time.sleep(1)
driver.find_element_by_xpath("//*[@name='memberPass']").click()
3、自定义浏览器大小
本文来学习下如何通过Selenium方法,设置符合不同测试场景浏览器窗口大小。例如,你有一台机器,最大支持1366*768,你完全可以利用这个机器测试不同分辨率下的场景。
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window() # 全屏
driver.get('https://www.baidu.com')
time.sleep(1)
print (driver.get_window_size())
driver.set_window_size(1280,800) # 分辨率 1280*800
time.sleep(1)
print (driver.get_window_size())
driver.set_window_size(1024,768) # 分辨率 1024*768
time.sleep(1)
print (driver.get_window_size())
4、断言页面标题
本文介绍一个Selenium中页面title断言方法,这个在基础篇中第一个完整的脚本有提到过,这个补充一下。
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
time.sleep(1)
# 方法一
try:
assert u"百度一下" in driver.title
print ('Assertion test pass.')
except Exception as e:
print ('Assertion test fail.', format(e))
# 方法二
if u"百度一下,你就知道" == driver.title :
print ('Assertion test pass.')
else:
print ('Assertion test fail.')
print (driver.title)
5、获取元素上面的文字
本文介绍如何通过Selenium方法来获取某一个元素的text属性值。在很多自动化测试脚本中,需要多次获取元素的text值,拿过来进行对比和匹配。例如,在一个登陆界面,如果不输入用户名和密码,直接点击登录,肯定会有相关错误提醒。这个错误,我们需要通过selenium抓取出来,和需求说明文档中的描述去进行匹配,如果匹配,测试成功,否则失败。
# coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("http://www.baidu.com/")
time.sleep(1)
driver.find_element_by_xpath("//*[@id='u1']/a[7]").click()
time.sleep(1)
driver.find_element_by_xpath("//*[@id='TANGRAM__PSP_8__submit']").click()
# 断言方法一
try :
error_message = driver.find_element_by_xpath("//*[@id='TANGRAM__PSP_8__error' and text()='请您填写手机/邮箱/用户名']").is_displayed()
print ("Test pass. the error message is display.")
except Exception as e:
print ("Test fail.", format(e))
# 断言方法二,本文重点介绍方法
error_mes = driver.find_element_by_xpath("//*[@id='TANGRAM__PSP_8__error']").text
try:
assert error_mes == u'请您填写手机/邮箱/用户名'
print ('Test pass.')
except Exception as e:
print ("Test fail.", format(e))
6、验证控件是否被选中
前面文章我们了解了如何获取元素的text属性值,和判断元素是否显示在页面(is_displayed()方法),本文我们来学习下,判断一个控件是否被选中状态。
还是以百度新闻举例:
由于这个"新闻全文"是默认被选中状态,我们需要用脚本去判断是否被选中。
相关代码如下:
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("http://news.baidu.com/")
time.sleep(1)
try:
driver.find_element_by_xpath("//*[@id='news']").is_selected()
print ('Test Pass.')
except Exception as e:
print ('Test fail',format(e))
7、获取页面元素大小
本文介绍如何通过Selenium方法去获取页面元素的大小。这个场景是可能在需要测试的,例如在前端测试过程中,需要去测试某一个控件是否和设计大小保持一致。
这里用百度首页的“百度一下”这个按钮举例,打印出这个按钮的大小。
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com/")
time.sleep(1)
search_btn = driver.find_element_by_id('su')
print (search_btn.size)
8、组合键--全选文字
本文开始介绍Selenium中Keys模块下的一些组合,或快捷键的使用。前面的一篇文章,介绍了如何新开一个tab,也是用到这块的知识。
本文介绍全选当前页面文字,快捷键是 Ctrl+a,主要还是用send_keys()方法输入组合键,这里用百度首页举例。
# coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
element = driver.find_element_by_tag_name('body')
element.send_keys(Keys.CONTROL + 'a')
9、组合键-退格键删除文字
前面一篇文章介绍了,常规清除文本输入框字符的方法clear(), 本文介绍
相关脚本代码如下,这里用百度首页搜索输入框举例:
# coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
element.send_keys("Selenium automation")
time.sleep(1)
element.send_keys(Keys.CONTROL+'a')
element.send_keys(Keys.BACKSPACE)
10、鼠标右键
本文介绍如何使用Selenium中右键方法来操作网页元素。网页上有些元素是支持右键来触发新的菜单,这里找一个百度首页,百度logo的右键,查看图片动作来模拟这个场景。
问题拆分:
1. 打开百度首页,找到logo,右键鼠标
2. 移动到菜单,查看图像,然后点击
核心问题,如何右键操作,然后是如何选择查看图像这个菜单。在Selenium中,有一个ActionChains模块支持,右键,鼠标悬停,拖拽,双击等动作。我们可以通过键盘向下箭头来选择查看图像这个菜单,然后点击就可以达到目的。
# coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
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.context_click(element).send_keys('i').perform()
11、执行JavaScript
前面文章介绍了ActionChains下的鼠标悬停和右键操作,其实ActionChains还有其他方法,你可以 action = ActionChains,通过这,先初始化一个ActionChains实例对象,然后在action后面输入一个点号,查看支持哪些action方法。本文开始介绍如何执行JS脚本,会用两个例子说明。
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com")
time.sleep(1)
driver.execute_script("window.alert('这是一个alert弹框。');") # 注意这里的分号是英文输入法的分号,不能用中文
示例二,执行js脚本来控制浏览器竖向滚动条
打开百度贴吧,然后拖动滚动条到左侧 “地区"
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://tieba.baidu.com/index.html")
time.sleep(1)
target_elem = driver.find_element_by_link_text("地区")
driver.execute_script("return arguments[0].scrollIntoView();",target_elem) # 用目标元素参考去拖动
#driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动