0
点赞
收藏
分享

微信扫一扫

python selenium (二)

木匠0819 2022-03-12 阅读 88

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()  # 单选框
driver.find_element_by_id("kw").send_keys("aaaa")#输入文本
driver.find_element_by_id("kw").clear()#清空文本
driver.find_element_by_id("su").click()#点击按钮
driver.find_element_by_id("kw").submit()#用于提交表单
driver.find_element_by_id('kw').size#获得元素的大小
driver.set_window_size() #设置浏览器的大小
driver.back() #控制浏览器后退
driver.forward() #控制浏览器前进
driver.refresh() #刷新当前页面
driver.close()#关闭当前选项卡页面
driver.quit()#关闭所有选项卡页面
driver.title #获取页面 title
driver.current_window_handle#当前页面的句柄
driver.current_window_handle#当前所有的句柄,返回句柄列表
driver.switch_to_window(dr.window_handles[0])#switch_to_window()   切换窗口(一般通过句柄切换)
ActionChains(driver).move_to_element(element).perform()#对定位到的元素执行鼠标悬停操作,引入 ActionChains 类from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver)	#构造ActionChains对象
context_click()#	执行鼠标悬停操作
move_to_element(above)	#右击
double_click()	#双击
drag_and_drop()	#拖动
context_click()	#用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform()	#执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作
action.drag_and_drop(source_element, target_element)#在源元素上按住鼠标左键,然后移动到目标元素并释放鼠标按钮。
ActionChains(driver).drag_and_drop_by_offset(element, 50, 20).perform()#在源元素上按住鼠标左键,然后移动到目标偏移并释放鼠标按钮。
get_window_size()  #获取浏览器窗口大小
set_window_size(480,800)       #设置浏览器窗口大小
maximize_window()  #浏览器窗口最大化
current_url	 #获取当前页面的url地址
page_source		# 获取当前页面的源代码

窗口滚动操作
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.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 条评论