python selenium (二)

python selenium (二)

定位
单个

find_element_by_id()
find_element_by_name()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector()

多个元素

find_elements_by_name()
find_elements_by_xpath()
find_elements_by_link_text()#将返回与位置匹配的链接文本值的第一个元素。
find_element_by_partial_link_text()
#login_form = driver.find_element_by_partial_link_text('Conti')将返回与位置匹配的部分链接文本值的第一个元素<a href="cancel.html">Cancel</a>
find_elements_by_tag_name()#将返回具有给定标签名称的第一个元素。
find_elements_by_class_name()
find_elements_by_css_selector()#driver.find_element_by_css_selector("input[class='ui2-button ui2-button-primary']").click() 这种就很好用,一般中间有空格的名字要用中括号的方法
   

获取标签内容

src=driver.find_element_by_id('xxxx').get_attribute('src') #获取src的内容
text_a=driver.find_element_by_id('xxxx').text #获取该元素的文本

获取标签属性

link=dr.find_element_by_id('xxxx')
link.value_of_css_property('color') #获取CSS属性color的属性值
link.find_element_by_tag_name('p').value_of_css_property('font')  #获取p的CSS属性font的属性值

获取标签状态
is_enable():用于存储input、select等元素的可编辑状态,可以编辑返回true,否则返回false
is_displayed():判断某个元素是否存在页面上,是html代码的存在。某些情况元素的visibility为hidden或者display属性为none.
isSelected():判断某个元素是否被选中。一般判断表单元素。如checkbox。

print(driver.find_element_by_id("xxx").is_displayed())#是否显示
print(driver.find_element_by_id('xxxx').find_element_by_name('xxx').is_enabled())#是否存在
driver.find_element_by_id('xxxx').is_selected() #判断是否被选中
#例如:判断单选框s有没有选中,没有就点击它
s = driver.find_elements_by_css_selector("input[class='ui-checkbox ui-checkbox-system']")[0].is_selected()
print(s)#没选中状态下,看is_selected()返回值
if s == False:
	driver.find_elements_by_css_selector("input[class='ui-checkbox ui-checkbox-system']")[0].click()  # 单选框
#引入 ActionChains 类:from selenium.webdriver.common.action_chains import ActionChains
send_keys("aaaa")#输入文本
clear()#清空文本
click()#点击按钮
move_to_element(above)	#右击
double_click()	#双击
submit()#用于提交表单
size#获得元素的大小
back() #控制浏览器后退
forward() #控制浏览器前进
refresh() #刷新当前页面
close()#关闭当前选项卡页面
quit()#关闭所有选项卡页面
driver.title #获取页面 title
driver.current_window_handle#当前所有的句柄,返回句柄列表
driver.switch_to.window(driver.window_handles[-1])  #切换窗口
move_to_element(element).perform()#对定位到的元素执行鼠标悬停操作
context_click()	#用于模拟鼠标右键操作, 在调用时需要指定元素定位
drag_and_drop(source_element, target_element)#在源元素上按住鼠标左键,然后移动到目标元素并释放鼠标按钮。
move_to_element_with_offset(to_element, xoffset, yoffset) #移动鼠标到某个元素位置的偏移位置
#例如滑动滑块:
    driver.execute_script("arguments[0].scrollIntoView();", draggable)# 滚动指定元素位置
    ActionChains(driver).click_and_hold(draggable).perform()#鼠标单击并且按住不放
    ActionChains(driver).move_by_offset(xoffset=247, yoffset=0).perform()# 指定鼠标移动到某一个位置,需要给出两个坐标位置
    ActionChains(driver).release().perform()#释放按下的鼠标
get_window_size()  #获取浏览器窗口大小
set_window_size(480,800)       #设置浏览器窗口大小
maximize_window()  #浏览器窗口最大化
current_url	 #获取当前页面的url地址
page_source		# 获取当前页面的源代码

以下部分来源:python
selenium(常用关键字)

窗口滚动操作
js = “window.scrollTo(300,200)” #300表示左边距,200表示上边距
js = “document.documentElement.scrollTop=200” #向下滑动200px
js = “document.documentElement.scrollLeft=300” #向右滑动300px
execute_script(js)

driver.execute_script("arguments[0].scrollIntoView();", p)  #跳到该元素p位置
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')  # 滑到底部
driver.execute_script('window.scrollTo(0,0)')  # 滑到顶部

线程等待(强制等待):time.sleep(s)
隐式等待:driver.implicitly_wait(s) 等待页面所以的元素加载完成,则会自动进行下一步操做,如果等待时间超过设置的时间则会报错
显式等待:等待页面特定的某个元素加载后,才会进行下一步操作,如果在设定的时间内没有找到则会报错

element = WebDriverWait(driver=dr,timeout=10,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID,"kw")))#显式等待

implicitly_wait()	#等待时间,单位秒
set_page_load_timeout()	#设置一个页面完全加载完成的超时等待时间,单位秒
set_script_timeout()	#设置脚本执行的超时时间

timeout #最长超时时间,默认以秒为单位
poll_frequency #检测的间隔(步长)时间,默认为 0.5S
ignored_exceptions #超时后的异常信息,默认情况下抛 NoSuchElementException 异常

在ifram框架内要切进来才可以操作,然后再切出去

dr.switch_to_frame("iframeid")  #直接定位frame框架,只能通过id/name定位
dr.switch_to.default_content() #取消选择一个 frame(跳回最外层的页面)
dr.switch_to.parent_frame() #取消选择一个 frame(跳出当前 frame)

弹窗
switch_to.alert.accept()   #确定
switch_to.alert.dismiss()   #取消
switch_to.alert.text   #获取弹框信息

WebDriverWait() 一般由 until() 或 until_not() 方法配合使用

EC 预置条件模块具有很多类型的判断:

	presence_of_element_located  #判断当前元素是否存在
	presence_of_all_elements_located   #判断一组元素是否存在
	text_to_be_present_in_element_value  #判断元素值是否有xx文本信息
	presence_of_all_elements_located    # 判断一组元素是否存在
from selenium.webdriver.common.keys import Keys

Keys.BACK_SPACE 删除输入框内结尾的单个字符
Keys.SPACE 空格
Keys.ENTER 点击enter键
Keys.CONTROL,“a” 全选
Keys.CONTROL,“x” 剪切
Keys.CONTROL,“c” 复制
Keys.CONTROL,“v” 粘贴

# Keys.SPACE 空格
# Keys.ENTER 回车操作
dr.find_element_by_id("kw").send_keys("xxx", Keys.SPACE, "xx内容xxx", Keys.ENTER)
time.sleep(2)
# Keys.BACK_SPACE 删除最后一个字符
dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE * 3)
time.sleep(2)
# Keys.CONTROL,"a" 全选
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
# Keys.LEFT 光标左移
dr.find_element_by_id("kw").send_keys(Keys.LEFT * 3)
time.sleep(2)
# shift + right 右移光标选中
dr.find_element_by_id("kw").send_keys(Keys.SHIFT, Keys.RIGHT * 3)
time.sleep(2)

断言
assert断言(基于unittest)

assertIn(arg1, arg2, msg=None)# 验证 arg1 是 arg2 的子串,不是则 fail
assertNotIn(arg1, arg2, msg=None) #验证 arg1 不是 arg2 的子串,是则 fail
assertEqual(arg1, arg2, msg=None) #验证 arg1=arg2,不等则 fail
assertNotEqual(arg1, arg2, msg=None)#验证 arg1 != arg2, 相等则 fail
#通过if进行断言判断
if '保存成功' in ts.text:    #如果‘保存成功’在提示内容中包含
    print('Assertion test pass.')
else:
    print('Assertion test fail.')

#通过Python自带的Assert断言
ts = driver.find_element_by_class_name("ivu-modal-content")  #定位获取提示框信息
print(ts.text) #打印提示内容
self.assertIn("保存成功", ts.text,msg='保存失败')  #如果提示内容中包含“保存成功”,用例通过,否则失败,打印:保存失败

#通过try抛出异常进行断言判断
#判断百度首页是否有id为“kw”的元素(其实为百度的搜索输入框)。下图
try:
    driver.find_element_by_id("kw")
    print("test pass: ID found")
except Exception as e:
    print("Exception found", format(e))

https://blog.csdn.net/BEEKSTAR/article/details/78873749?utm_source=blogxgwz3

WebDriver提供许多用来与浏览器交互的功能和设置,通过WebDriver的功能和一些方法,来实现与浏览器窗口、警告、框架和弹出窗口的交互,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等方便我们测试的特性。
通过WebElement可以实现与网站页面元素的交互,包括文本框、文本域、按钮、单选框、多选框、表格、行、列和div等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值