UI自动化的API总结

摘要:
断言:assert1==2在unittest:assertEqual(title,u“您将知道它是否超过100”,“页面标题属性值错误!

断言:assert 1 == 2
unittest里的断言:assertEqual(title, u"百度一下,你就知道", "页面title属性值错误!")
前进:driver.forward()
后退:driver.back()
刷新:driver.refresh()
最大化:driver.maximize_window()
获取坐标:driver.get_window_position()
缩放窗体:driver.set_window_size(width = 200, height = 400, windowHandle='current')
获取窗体大小信息:driver.get_window_size(windowHandle='current')
获取标题栏:driver.title
获取源码:driver.page_source
获取当前页的url:driver.current_url
获取当前窗口句柄:driver.current_window_handle
获取所有窗口句柄:driver.window_handles
切换窗口:driver.switch_to.window(handle)
获取元素的标签名:newsElement.tag_name
获取元素的size:newsElement.size
获取元素的文本:newsElement.text
获取元素的链接:newsElement.get_attribute("href")
获取元素的链接:newsElement.get_property("href")
判断元素是否可见:div2.is_displayed()
JavaScript代码操作设置元素是否可见:driver.execute_script("document.getElementById('input2').disabled=false;")
获取输入框:searchBoxElement.get_attribute("value")或者searchBox.get_attribute("name")
获取样式表内容:searchBoxElement.value_of_css_property("font-family")
清除输入:
inputElement = self.driver.find_element_by_id("kw")
inputElement.send_keys(u"自动化测试")
inputElement.clear()
拟鼠标左键单击操作:
buttonElement = self.driver.find_element_by_id("button")
buttonElement.click()
模拟鼠标双击操作:
action_chains = ActionChains(self.driver)
action_chains.double_click(inputBox).perform()
select的操作-文本:
select = self.driver.find_element_by_name("fruit")
all_options = select.find_elements_by_tag_name("option")
for option in all_options:
print(u"选项显示的文本:", option.text)
print(u"选项值为:", option.get_attribute("value"))
option.click()
select的操作-通过序号选择:select_element.select_by_index(1)
select的操作-通过选项的显示文本选择:select_element.select_by_visible_text("猕猴桃")
select的操作-通过选项的value属性值:select_element.select_by_value("shanzha")
默认选中项的文本:
select_element = Select(self.driver.find_element_by_xpath("//select"))
select_element.first_selected_option.text
获取所有选择项的页面元素对象:
select_element = Select(self.driver.find_element_by_xpath("//select"))
select_element.options
所有的选中项文本:
for option in select_element.all_selected_options:
print(option.text)
取消所有已选中项:select_element.deselect_all()
选框被成功选:berryRadioElement.is_selected()
断言下拉列表是否被选中:assertListEqual(expect_optionsList, actual_optionsList)
断言复选框没被选中:assertFalse(berryRadio.is_selected())
断言复选框:assertEqual(radio.get_attribute("value"), "orange")
断言页面是否存在某些关键字:assert u"首页" in self.driver.page_source, u"页面源码中不存在该关键字!"
浏览器截屏:driver.get_screenshot_as_file(r"e:screenPicture.png")
操作系统的截屏:
from PIL import ImageGrab
im=ImageGrab.grab()
按时间创建文件夹并按时间命名存储截屏:
dir_name=time.strftime("%Y-%m-%d",time.localtime())
if not os.path.exists("e:\"+dir_name):
os.mkdir("e:\"+dir_name)
driver = webdriver.Chrome()
os.chdir("e:\"+dir_name)
for url in urls:
driver.get(url)
拖拽元素:
from selenium.webdriver import ActionChains
action_chains = ActionChains(self.driver)
action_chains.drag_and_drop(initialPositionElement, targetPositionElement).perform()
for i in range(5):
action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform()
driver.get_screenshot_as_file(time.strftime("%H-%M-%S",time.localtime())+".png")
模拟键盘操作:
from selenium.webdriver.common.keys import Keys
query = self.driver.find_element_by_id("query")
query.send_keys(Keys.F12)
query.send_keys("selenium")
query.send_keys(Keys.ENTER)
剪切板操作:
import win32clipboard as w
import win32con
import time
import win32api
# 读取剪切板
def getText():
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d
# 设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()

VK_CODE = {
'enter': 0x0D,
'ctrl': 0x11,
'a': 0x41,
'v': 0x56,
'x': 0x58
}


# 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)


# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)

模拟鼠标滚动

for i in range(1, 1500):
win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -1)


键盘码:
'''
VK_CODE = {
'backspace': 0x08,
'tab': 0x09,
'clear': 0x0C,
'enter': 0x0D,
'shift': 0x10,
'ctrl': 0x11,
'alt': 0x12,
'pause': 0x13,
'caps_lock': 0x14,
'esc': 0x1B,
'spacebar': 0x20,
'page_up': 0x21,
'page_down': 0x22,
'end': 0x23,
'home': 0x24,
'left_arrow': 0x25,
'up_arrow': 0x26,
'right_arrow': 0x27,
'down_arrow': 0x28,
'select': 0x29,
'print': 0x2A,
'execute': 0x2B,
'print_screen': 0x2C,
'ins': 0x2D,
'del': 0x2E,
'help': 0x2F,
'0': 0x30,
'1': 0x31,
'2': 0x32,
'3': 0x33,
'4': 0x34,
'5': 0x35,
'6': 0x36,
'7': 0x37,
'8': 0x38,
'9': 0x39,
'a': 0x41,
'b': 0x42,
'c': 0x43,
'd': 0x44,
'e': 0x45,
'f': 0x46,
'g': 0x47,
'h': 0x48,
'i': 0x49,
'j': 0x4A,
'k': 0x4B,
'l': 0x4C,
'm': 0x4D,
'n': 0x4E,
'o': 0x4F,
'p': 0x50,
'q': 0x51,
'r': 0x52,
's': 0x53,
't': 0x54,
'u': 0x55,
'v': 0x56,
'w': 0x57,
'x': 0x58,
'y': 0x59,
'z': 0x5A,
'numpad_0': 0x60,
'numpad_1': 0x61,
'numpad_2': 0x62,
'numpad_3': 0x63,
'numpad_4': 0x64,
'numpad_5': 0x65,
'numpad_6': 0x66,
'numpad_7': 0x67,
'numpad_8': 0x68,
'numpad_9': 0x69,
'multiply_key': 0x6A,
'add_key': 0x6B,
'separator_key': 0x6C,
'subtract_key': 0x6D,
'decimal_key': 0x6E,
'divide_key': 0x6F,
'F1': 0x70,
'F2': 0x71,
'F3': 0x72,
'F4': 0x73,
'F5': 0x74,
'F6': 0x75,
'F7': 0x76,
'F8': 0x77,
'F9': 0x78,
'F10': 0x79,
'F11': 0x7A,
'F12': 0x7B,
'F13': 0x7C,
'F14': 0x7D,
'F15': 0x7E,
'F16': 0x7F,
'F17': 0x80,
'F18': 0x81,
'F19': 0x82,
'F20': 0x83,
'F21': 0x84,
'F22': 0x85,
'F23': 0x86,
'F24': 0x87,
'num_lock': 0x90,
'scroll_lock': 0x91,
'left_shift': 0xA0,
'right_shift ': 0xA1,
'left_control': 0xA2,
'right_control': 0xA3,
'left_menu': 0xA4,
'right_menu': 0xA5,
'browser_back': 0xA6,
'browser_forward': 0xA7,
'browser_refresh': 0xA8,
'browser_stop': 0xA9,
'browser_search': 0xAA,
'browser_favorites': 0xAB,
'browser_start_and_home': 0xAC,
'volume_mute': 0xAD,
'volume_Down': 0xAE,
'volume_up': 0xAF,
'next_track': 0xB0,
'previous_track': 0xB1,
'stop_media': 0xB2,
'play/pause_media': 0xB3,
'start_mail': 0xB4,
'select_media': 0xB5,
'start_application_1': 0xB6,
'start_application_2': 0xB7,
'attn_key': 0xF6,
'crsel_key': 0xF7,
'exsel_key': 0xF8,
'play_key': 0xFA,
'zoom_key': 0xFB,
'clear_key': 0xFE,
'+': 0xBB,
',': 0xBC,
'-': 0xBD,
'.': 0xBE,
'/': 0xBF,
'`': 0xC0,
';': 0xBA,
'[': 0xDB,
'\': 0xDC,
']': 0xDD,
"'": 0xDE,
'`': 0xC0
}
'''
鼠标右键点击操作:ActionChains(self.driver).context_click(searchBox).perform()
元素上执行按下鼠标左键:

ActionChains(self.driver).click_and_hold(div).perform()

或者

ActionChains(self.driver).click(div).perform()
将鼠标悬浮到第一个链接元素上:

ActionChains(self.driver).move_to_element(link1).perform()  #悬浮到A

find_element(driver,By.LINK_TEXT,"关联案件").click()  #点击B
异常处理:
try:
element = self.driver.find_element(by=by, value=value)
except NoSuchElementException as e:
# 打印异常信息
print(e)
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
# 没有发生异常,表示在页面中找到了该元素,返回True
return True

隐式等待:driver.implicitly_wait(10) #对所有元素有效
显示等待-是否可见:
def visibility(webelement):
wait = WebDriverWait(driver, 10, 0.2)
wait.until(EC.visibility_of(webelement))
显示等待-是否可点击:
def clickable(by, locator_path):
wait = WebDriverWait(driver, 10, 0.2)
element = wait.until(EC.element_to_be_clickable((by, locator_path)))
return element
显示等待-ALTER弹窗:
wait = WebDriverWait(self.driver, 10, 0.2)
alert = wait.until(EC.alert_is_present())
返回之前的iframe页面:driver.switch_to.default_content()
进入该frame方法1:driver.switch_to.frame(self.driver.find_elements_by_tag_name("frame")[1])
进入该frame方法2:driver.switch_to.frame(self.driver.find_element_by_id("rightframe"))
进入该frame方法3:driver.switch_to.frame("rightframe")
进入该frame方法4:driver.switch_to.frame(0)
获取alert对象:driver.switch_to.alert
confirm窗的确定:alert.accept()
confirm窗的取消:alert.dismiss()
prompt窗体的输入框中输入:alert.send_keys(u"光荣之路:要想改变命运,必须每天学习2小时!")
当前页面下所有的Cookies:driver.get_cookies()
删除name值为“ABTEST”的Cookie信息:driver.delete_cookie("ABTEST")
删除全部Cookie信息:driver.delete_all_cookies()
添加自定义Cookie信息:driver.add_cookie({"name": "gloryroadTrain", 'value': '1479697159269020'})
设定页面加载限制时间:driver.set_page_load_timeout(10)
JavaScript代码操作点击按钮:driver.execute_script(searchButtonJS)
JavaScript代码操作滚动条滑动到页面的最下方:driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
JavaScript代码操作滚动横轴的一半坐标:driver.execute_script("document.getElementsByTagName('a')[500].scrollIntoView(true);")
JavaScript代码操作向下滚动400像素:driver.execute_script("window.scrollBy (0,400);")
模拟键盘点击下箭头:
for i in range(3):
# 选择悬浮框中中第几个联想关键词选项就循环几次
# 模拟键盘点击下箭头
searchBox.send_keys(Keys.DOWN)
time.sleep(0.5)
杀掉浏览器进程:os.system("taskkill /F /iM chrome.exe")

键盘操作:
导入Keys:from selenium.webdriver.common.keys import Keys
回车:element.send_keys(Keys.ENTER)
清理:element.clear()
上:element.send_keys(Keys.ARROW_UP)
下:element.send_keys(Keys.ARROW_DOWN)
左:element.send_keys(Keys.ARROW_LEFT)
右:element.send_keys(Keys.ARROW_RIGHT)

向下:ActionChains(driver).send_keys(Keys.DOWN).perform()
回车:ActionChains(driver).send_keys(Keys.ENTER).perform()

操作隐藏元素:
方法1:
js = ’document.querySelectorAll("select")[0].style.display="block";’
方法2:
js = "document.getElementById("txtPassword").style.display='block';"
其他方法:
(getElementById():返回对指定ID第一个对象的引用
getElementsByName() :返回带有指定名称的对象集合
getElementsByTagName():返回带有指定标签名的对象集合)
# 调用js脚本
driver.execute_script(js)
sleep(3)
driver.find_element_by_id("txtPassword").send_keys("123456")

 

 

随机获取select下的值:

方法1:

select = browser.find_element_by_xpath("//form[@class='searchFrom']/div[6]/select")
options_list = select.find_elements_by_tag_name("option")
project = random.choice(options_list).get_attribute("value")
print(project)

方法2:

select = Select(browser.find_element_by_xpath("//form[@class='searchFrom']/div[6]/select"))
print(random.choice(select.options).get_attribute("value"))

免责声明:文章转载自《UI自动化的API总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS7安装部署Redis5.0.9并配置开机自启动互联网产品怎么做数据埋点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(4.40)sql server默认连接选项

一、SQLserver 默认连接选项 当我们连接sqlserver数据库时,我们发现Sqlserver Profiler 里面的Audit Login 事件: -- network protocol: TCP/IP 1    set quoted_identifieron 2    set arithabortoff 3    set numeric_ro...

【转】IO模型及select、poll、epoll和kqueue的区别

(一)首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronous I/O (the POSIX aio_functions)—————异步IO模型最大的特点是...

SQL Server 执行计划缓存

概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之前先要了解一些基础知识,所以文章前面会讲一些概念,学起来会比较枯燥,但是这些基础知识非常重要。 目录 概述 基础概念 怎样缓存执行计划 SQL Server自动删除执行计划 重新编译执行计划 测试 执行计划相关系统视图 手动清空缓存执...

Oracle中特殊的INSERT语句

---------------------------------------insert into table-name select ...---------------------------------------insert into table-name values(coL-values, ... default)--------------...

Oracle SQL获取每个分组中日期最大的一条数据

  在报表开发中,经常遇到这样的问题:分组后,只需要每个分组最新的一条数据,其他的就不要了   此时的思路应该是:对分组进行排序,并编号,然后select编号为1的记录即可。   代码如下: select rn,a,b,c from (select ROW_NUMBER() OVER(PARTITION BY a ORDER BY b DESC) r...

db2 reorg详解

reorgchk,检查table index 是否需要重组。reorg 重组,重新放置数据位置。runstats 统计信息,可以优化查询器 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用...