UI自动化测试ActionChains类/WebDriverWait类/keys类/JS类实战

iFrame定位

遇到iFrame框架,解决问题的思路是:

1.先进入到iFrame框架

2.然后再定位框架里面的元素属性

怎么判断?

当你使用所有的元素定位的方式并且都是正确的,但是就是提示找不到。那么这时查看源码是否存在iFrame框架。如果存在,通过三种方式可以进入到iFrame框架:以下用新浪邮箱为例

1.通过ID

2.通过索引

3.通过name(基本不使用)

 一、ActionChains类

ActionChains主要是针对鼠标事件的处理,在鼠标事件中常用的交互为悬浮,双击,以及右键等

操作。如果想使用ActionChains的类,首先需要导入它,导入的命令为:

from selenium.webdriver.common.action_chains import ActionChains

1、鼠标事件

鼠标时间就以百度搜索的设置来案例,鼠标悬浮到设置,就会显示出下拉框的内容信息,

具体交互信息如下:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time as t

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
#鼠标事件进行实例化
obj=ActionChains(driver=driver)
#要定位的元素属性的对象
setting=driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[4]/span')
obj.move_to_element(setting).perform()
t.sleep(6)
#点击搜索设置
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[4]/div[1]/div/a[1]/span').click()
t.sleep(5)
driver.quit()

2、右键操作

   右键使用到的方法为content_click() 的方法,下面就以百度搜索输入框为案例,来演示右键的操作

 

 

3、双击操作,以百度搜索框为例

   double_click一般主要应用于数据的交互方面

 二、WebDriverWait类

         在UI的自动化测试中,显式等待主要使用的是类WebDriverWait,它里面提供了很多的解决方案,下面具体对它进行分析,我们要使用它,那么我们就首先需要到人它,导入的代码如下:

from selenium.webdriver.support.ui import WebDriverWait

在ui自动化测试中,关于等待的部分,主要汇总如下三点:

1、固定等待,也就是使用sleep()方法

2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间

下面以百度为例

 

 

 

3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,那么如果判断失败,就会报TimeOutExpection的异常信息。

这里以百度操作为例,在搜索框输入“接口测试”,最长等待60秒,再获取输入的文本信息值

 

 

 

4、指定元素的文本信息

这个方法主要应用于错误文本信息的验证,我们首先需要错误文本信息显示出来才能够进行断言的验证,使用到的方法为:text_to_be_present_in_element,

这里以新浪邮箱为例,在不输入用户名和密码的情况下,点击登录,看是否能跳出“请输入邮箱名”的文本信息。

text_to_be_present_in_element()元素的文本资源加载出来
driver = webdriver.Chrome()
driver.maximize_window()      #浏览器最大化固定加上
driver.get('http://mail.sina.com.cn/')
driver.implicitly_wait(60)  #隐式等待,最长等待60秒
driver.find_element_by_class_name('loginBtn').click()
t.sleep(5)
divText=WebDriverWait(
    driver=driver,
    timeout=10).until(
    method=es.text_to_be_present_in_element((
        By.XPATH,
        '/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]'),text_='请输入邮箱名'))
driver.quit()

5、判断元素是否可见

这里以百度的“关于百度”为例,进行点击,使用到的方法为:visibilty_of_element_located

"""判断元素是否可见"""
driver = webdriver.Chrome()
driver.maximize_window()      #浏览器最大化固定加上
driver.get('http://www.baidu.com/')
driver.implicitly_wait(60)  #隐式等待,最长等待60秒
about=WebDriverWait(
    driver=driver,
    timeout=10).until(
    method=es.visibility_of_element_located((
        By.LINK_TEXT,
        '关于百度')))
print(about.text)
about.click()
t.sleep(5)
driver.quit()

 

 

 三、keys类实战

  在UI的自动化测试中,有时候也会遇到键盘事件的操作,使用到的类为Keys,导入方式具体如下:

from selenium import  webdriver
from selenium.webdriver.common.keys import Keys
import  time as t

driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
so=driver.find_element_by_id('kw')
so.send_keys('Selenum3')
#全部选择输入的关键字
so.send_keys(Keys.COMMAND,'a')
t.sleep(3)
#然后复制
so.send_keys(Keys.COMMAND,'c')
t.sleep(3)
#然后删除
so.send_keys(Keys.BACKSPACE)
t.sleep(3)
#然后复制关键字
so.send_keys(Keys.COMMAND,'v')
t.sleep(5)
driver.quit()

 

  四、JS的处理

  在UI的自动化测试中,我们也是需要使用JS来处理一些特殊的交互,比如针对浏览器的滑动操作,以及针对富文本的特殊处理,和针对只读属性的时间控件的处理。下面通过实际的案例来演示这部分的具体应用和案例实战。

1、浏览器的滑动

         浏览器的滑动主要分为浏览器的向上和向下,比如我们就以boss直聘为案例,我们进行关键字的搜索后,想点击下一步的操作,但是下一步无法展示出来,就需要把页面滑动到底部才可以展示出来。

import time
from selenium import webdriver
import time as t
'''浏览器滑动'''
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.zhipin.com/xian/?sid=sem_pz_bdpc_dasou_title")
driver.implicitly_wait(30)
driver.find_element_by_name("query").send_keys("软件测试")
driver.find_element_by_xpath("/html/body/div[1]/div[3]/div/div[1]/div[1]/form/button").click()
t.sleep(3)
#浏览器滑动到底部
down="var q=document.documentElement.scrollTop=1000"
driver.execute_script(down)
t.sleep(3)
#点击下一页
driver.find_element_by_class_name("next").click()
t.sleep(5)
driver.execute_script(down)
t.sleep(5)
#浏览器滑动到顶部
up="var q=document.documentElement.scrollTop=0"
driver.execute_script(up)
t.sleep(3)
driver.quit()

 

2、富文本的处理

普通方法

#富文本操作
# driver = webdriver.Chrome()
# driver.maximize_window()
# driver.get('https://uutool.cn/ueditor/')
# driver.implicitly_wait(30)
# driver.switch_to.frame('ueditor_0')
# driver.find_element_by_xpath('/html/body').send_keys('jiahisuxgs')
# t.sleep(5)
# driver.quit()

3、时间控件

时间控件解决操作步骤:

那么我们需要填写时间的属性,具体解决问题的步骤为:

取消时间控件的只读属性 取消只读属性后,操作input控件的value,其实我们知道input里面输入的内容最终是在value的属性里面。

 

#时间控件
def startTime(driver,content):
    '''开始时间控件'''
    js="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');" \
       "$(\"input[placeholder='开始时间≥当前时间']\").attr('value','{0}')".format(content)
    driver.execute_script(js)

def endTime(driver,content):
    '''结束时间控件'''
    js="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');" \
       "$(\"input[placeholder='结束时间>开始时间']\").attr('value','{0}')".format(content)
    driver.execute_script(js)

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///D:/Time/index.html')
t.sleep(3)
startTime(driver=driver,content='2001-01-01 00:00')
t.sleep(3)
endTime(driver=driver,content='2020-11-11 00:00')
t.sleep(3)
driver.get_screenshot_as_file(filename='index.png')#截图操作
driver.quit()

获取到的截图:

 

posted @ 2022-04-07 16:58  lm970418  阅读(70)  评论(0编辑  收藏  举报