0


selenium web UI自动化 -- select、鼠标、键盘、等待方式、网页嵌套及实例

1、select 元素定位

select元素定位主要用于有下拉选择的地方,基本步骤:

1.引入Select

from selenium.webdriver.support.select import Select

2.select 实例化

s=Select(元素地址)

3.给控件赋予内容

    s.select_by_index(索引)

    s.select_by_value('value')

    s.select_by_visible_text(文本内容)

eg:从指定网页下拉列表选择地址

from selenium.webdreiver.support.select import Select
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.get('https://www.')
s=Select(driver.find_element(By.ID,'province'))
s.select_by_index(3)
# time.sleep(1)
c=Select(driver.find_element(By.ID,'city'))
c.select_by_value('637')
# time.sleep(1)
d=Select(driver.find_element(By.ID,'district'))
d.select_by_visible_text('长安区')
# time.sleep(1)
t=Select(driver.find_element(By.ID,'twon'))
t.select_by_value('641')

2、鼠标

    鼠标事件,click()是模拟鼠标的单击操作,现在的web产品中提供了更丰富的交互方式,例如鼠标右击、双击、悬停、甚至是鼠标拖动等功能。

WebDriver中,这些方法封装在ActionChains类中,需要导入以下包:

from selenium.webdriver.common.action_chains import ActionChains

常见的方法有:

ActionChains中存储的行为:

perform():执行所有

context_click():右击

double_click():双击

drag_and_drop():拖动

move_to_element():鼠标悬停

eg:鼠标悬停

ac=ActionChains(driver)
ac.move_to_element(driver.find_element(By.XPATH,"//div[@class='u-dt']/child::span"))
ac.perform()

3、键盘

    键盘事件,Keys()类提供了键盘上几乎所有的按键的方法。send_keys()方法可以用来模拟键盘输入,除此之外,我们还可以用它来输入键盘上的按键,甚至是组合键,如Ctrl+A,Ctrl+C等,需要导入以下包:from selenium.webdriver.common.keys import keys

Send_keys(Keys.Back_SPACE):删除键

Send_keys(Keys.SPACE):空格键

Send_keys(Keys.TAB):制表键

Send_keys(Keys.ESCAPE):esc键

Send_keys(Keys.ENTER):回车键

Send_keys(Keys.CONTROL,’a’):全选

Send_keys(Keys.CONTROL,’c’):复制

Send_keys(Keys.CONTROL,’x’):剪切

Send_keys(Keys.CONTROL,’v’):粘贴

'''
实例:
1.登录http://testingedu.com.cn:8000/Home/user/login.html
2.在搜索框中输入“手机”
3.生成鼠标后双击搜索框,停止4秒后单击搜索按钮
'''

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://testingedu.com.cn:8000/Home/user/login.html')
driver.find_element(By.XPATH,"//input[@class='text_cmu'][1]").send_keys('123456')
time.sleep(2)
driver.find_element(By.XPATH,"//input[@class='text_cmu'][1]").send_keys(Keys.CONTROL,'a')
time.sleep(2)
driver.find_element(By.XPATH,"//input[@class='text_cmu'][1]").send_keys(Keys.CONTROL,'x')
time.sleep(2)
driver.find_element(By.XPATH,"//input[@class='text_cmu'][1]").send_keys('13800138006')
time.sleep(2)
driver.find_element(By.XPATH,"//input[ @id='password']").send_keys(Keys.CONTROL,'v')
time.sleep(2)
driver.find_element(By.XPATH,"//input[ @id='verify_code']").send_keys('1234')
driver.find_element(By.XPATH,"//a[@class='J-login-submit']").click()
time.sleep(2)
driver.find_element(By.ID,'q').send_keys('手机')
ac=ActionChains(driver)
ac.double_click(driver.find_element(By.ID,'q'))
ac.perform()
time.sleep(4)
ac.click(driver.find_element(By.LINK_TEXT,"搜索"))
ac.perform()

4、等待方式

    如今很多web都在使用AJAX技术,运用这种技术的软件当浏览器加载页面时,页面上的元素可能不会被同步加载完成,如此一来,定位元素时就会出现困难。我们可以通过设置元素等待来改善这类问题导致的测试脚本不稳定

WebDriver提供了三种种元素等待方式:

隐式等待(implicitly)

是全局等待方式,设置了一个等待时间,如果在等待时间内,网页已加载完成会继续往下执行,超过时间没有加载完成也会往下执行

eg: driver.implicitly_wait(30)

显式等待

    就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就抛出Exception。(简而言之,就是直到元素出现才去操作,如果超时则报异常)  
需要先引入以下包:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

使用方法:

WebDriverWait(浏览器,需要等待的时间,时间间隔检查).until(ec.函数((By.查找方式,'value')))

expected_conditions--显示等待常用函数:

title_is() 判断当前页面的title是否完全与预期字符串相等,结果为True或False

title_contains() 判断当前页面的title是否包含与预期字符串,返回布尔值

url_contains() 判断当前页面的url是否包含与预期字符串,返回布尔值

url_changes() 判断当前页面的url是否改变,返回布尔值

url_to_be() 判断当前页面的url是否完全与预期字符串相等,返回布尔值

presence_of_all_elements_located()

判断是否至少有1个元素存在于dom树中,只要有一个存在,结果返回TRUE

presence_of_elements_located() 判断元素是否被加到dom树,并不代表该元素一定可见

visibility_of_element_located() 判断元素是否可见

visibility_of() 判断元素是否可见,参数为定位后的元素

text_to_be_present_in_element() 判断某个元素中的text是否包含了预期的字符串

text_to_be_present_in_element_value()

判断某个元素中的value属性是否包含了预期的字符串

frame_to_be_available_and_switch_to_it()

判断该frame是否可以Switch进去,如果可以的话返回True并且Switch进去,否则返回FALSE

invisibility_of_element_located() 判断某个元素中不存在于dom树或不可见

element_to_be_clickable() 判断某个元素中是否可见并且可点击

stateness_of() 等某个元素从dom树中移除,返回布尔值

element_selection_state_to_be() 判断某个元素选中状态是否符合预期

element_to_be_selected() 判断某个元素是否被选中,一般用在下拉列表

element_located_selection_state_to_be() 判断某个元素是否符合预期

alter_is_present() 判断页面上是否存在alter

强制等待

不管浏览器有没有加载完成,都得等待给定的时间,超过等待时间没有加载完成也也会继续往下执行,会严重影响代码的执行速度

需要导入以下包:

from time import sleep

sleep(s)

5、网页嵌套

    在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位 这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

     比如腾讯qq邮箱的用户信息提交模块就是嵌套处理的,如果想要输入用户名、密码信息就要切换表单才可以

进入frame:

driver.switch_to.frame('id/name/xpath')

出frame:

driver.switch_to.parent_frame('id/name/xpath')

回到最初页面:

driver.switch_to.default_frame('id/name/xpath')

实例:登录QQ邮箱并发送邮件

import time
from selenium.webdriver.common.keys import Keys
from  selenium.webdriver.common.by import By
from selenium import webdriver

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.qq.com/')
#上台阶
driver.switch_to.frame('login_frame')
driver.find_element(By.ID,'u').send_keys('账号')
driver.find_element(By.ID,'p').send_keys('密码')
driver.find_element(By.ID,'login_button').click()

# 离开login_frame
driver.switch_to.default_content()

# 等待一秒
time.sleep(1)

# 定位写信按钮
driver.find_element(By.XPATH,'//*[@id="composebtn"]').click()

# 切换到mainFrame
driver.switch_to.frame('mainFrame')
time.sleep(1)

# 定位收件人,并输入[email protected]
driver.find_element(By.XPATH,'//*[@id="toAreaCtrl"]/div[2]/input').send_keys('[email protected]',Keys.ENTER)
time.sleep(1)

# 定位主题,并输入
driver.find_element(By.XPATH,'//*[@id="subject"]').send_keys("来自zhang发来的邮件")

# 定位邮件正文,先进入到iframe
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@class="qmEditorIfrmEditArea"]'))

# 先点击正文,再send_keys
driver.find_element(By.XPATH,'/html/body').click()
driver.find_element(By.XPATH,'/html/body').send_keys("Hello World","\nzhang")

# 返回到mainframe
driver.switch_to.parent_frame()

# 定位发送按钮
driver.find_element(By.XPATH,'//*[@name="sendbtn"]').click()
time.sleep(5)

#关闭浏览器
driver.quit()

本文转载自: https://blog.csdn.net/zr966458/article/details/126413511
版权归原作者 zr6486 所有, 如有侵权,请联系我们删除。

“selenium web UI自动化 -- select、鼠标、键盘、等待方式、网页嵌套及实例”的评论:

还没有评论