一、Selenium2+python自动化36-判断元素存在

1、捕获异常

from selenium import webdriver
import unittest
class Test1(unittest.TestCase):
#   一、准备浏览器驱动、网站地址
#       setUp在每个测试函数运行前运行,注意大小写;self不能省略def setUp(self):self.driver=webdriver.Chrome()self.baseurl="https://www.baidu.com"#   二、打开浏览器,发送请求函数名必须以test开头def test_01(self):browser=self.driverbrowser.get(self.baseurl)
#   四、调用方法,判断元素是否存在flag=Test1.isElementExist(self,“input”)if flag:print(“该元素存在”)else:print(“该元素不存在”)
#   三、判断元素是否存在的方法def isElementExist(self):flag=Truebrowser=self.drivertry:browser.find_element_by_css_selector(element)return flagexcept:flag=Falsereturn flag
#   五、运行所有以test开头的测试方法
if __name__=="__main__":unittest.main()

第二种:find_elements方法

#除第三步,其他步骤同上
def isElementExist(self):flag=Truebrowser=self.driverele=browser.find_elements_by_css_selector(element)if    len(ele)==0:flag=Falsereturn flagif len(ele)==1:return flagelse:flag=Falsereturn flag

二、elenium中hidden或者是display = none的元素是否可以定位到?

答:能定位到,只是不能操作,想点击的话,可以用js去掉dispalay=none的属性
如果面试官想问的是定位后操作隐藏元素的话,本质上说这个问题就是毫无意义的,web自动化的目的是模拟人的正常行为去操作。
如果一个元素页面上都看不到了,你人工也是无法操作的是不是?人工都不能操作,那你自动化的意义又在哪呢?所以这个只是为了单纯的考察面试者处理问题的能力,没啥实用性!(面试造飞机,进去拧螺丝)
既然面试官这么问了,那就想办法回答上给个好印象吧!
首先selenium是无法操作隐藏元素的(但是能正常定位到),本身这个框架就是设计如此,如果非要去操作隐藏元素,那就用js的方法去操作,selenium提供了一个入口可以执行js脚本。
js和selenium不同,只有页面上有的元素(在dom里面的),都能正常的操作,接下来用js试试吧!

<a hidden id="baidu" href="https://www.baidu.com">访问百度</a> 这个链接是隐藏的,但是能用js点到from selenium import webdriverdriver = webdriver.Firefox()
driver.get("http://localhost:63342/test1122/a/b.html")# js点击hidden元素js = 'document.getElementById("baidu").click()'
driver.execute_script(js)

三、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

1.首先通过封装find方法,实现wait_for_element_ispresent(WebDriverWait)
2.在对页面进行click之前,先滚动到该元素(通过Js封装),避免在页面未加载完成前或是在下拉之后才能显示。
3.不同方式进行定位,与expected_conditions判断方法封装,循环判断页面元素出现后再操作;
4.开发人员规范开发习惯,如给页面元素加上唯一的name,id等。

四、如何提高selenium脚本的执行速度?

1.优化测试用例。设置等待时间的时候,少用sleep,尽量不用implicitly_wait,多用显式等待方法;
2.减少不必要的操作步骤。如经过三四步才能打开要测试的页面的话,可以直接通过网址来打开;
3.中断页面加载。如果加载的内容不影响我们测试,就设置超时时间,中断页面加载;
4.使用Selenium grid,通过testNG实现并发执行。 在编写测试用例的时候,实现松耦合,然后再服务器允许的情况下,尽量设置多线程实现并发运行。

五、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

1.在经常检测失败的元素前尽量加上显式等待时间,等要操作的元素出现之后再执行下面的操作;
2.多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;
3.多用 try 捕捉,处理异常;
4.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。

六、如何设计高质量自动化脚本

1.使用四层结构实现业务逻辑、脚本、数据分离。
2.使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的元素属性
3.对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封装在一个方法中。
4 测试用例设计中,减少测试用例之间的耦合度。

七、你的自动化用例的执行策略是什么?

1.自动化测试用例是用来监控的。集成到jenkins,创建定时任务定时执行;
2.有些用例在产品上线前必须回归。jenkins上将任务绑定到开发的build任务上,触发执行;
3.有些用例不需要经常执行。jenkins创建一个任务,需要执行的时候人工构建即可。

八、什么是持续集成

频繁的将代码集成到主干,持续性的进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离主干

九、自动化测试的时候是不是需要连接数据库做数据校验?

UI自动化不需要
接口测试会需要

十、Selenium有几种定位方式?你最偏爱哪一种,为什么?

与name有关的有三种:name、class_name、tag_name
与link相关的有两种:link_text、partitial_link_text
与id有关:id
全能选手:xpath、css_selector
如果存在id,我一定使用Id,因为简单方便,定位最快。其次是Xpath,因为很多情况下html标签的属性不够规范,无法唯一定位。Xpath是通过相对位置定位
如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。

十一、如何去定位页面上动态加载的元素?

首先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)

十二、如何去定位属性动态变化的元素?

先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)
属性动态变化也就是指该元素没有固定的属性值,可以通过:
JS实现,
通过相对位置来定位,比如xpath的轴,paren/following-sibling/percent-sibling
http://www.cnblogs.com/zhaozhan/archive/2009/09/10/1564332.html

点击链接以后,selenium是否会自动等待该页面加载完毕?
不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。

十三、webdriver client的原理是什么?

在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client.
webdriver的协议是什么?
WebDrive协议本身是http协议,数据传输使用json

启动浏览器的时候用到的是哪个webdriver协议?
-http

十四、什么是page object设计模式?

1.通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法
2.用例层从页面层调用操作方法,写成用例
3.可以做到定位元素与脚本的分离

page object设置模式中,是否需要在page里定位的方法中加上断言?
不需要,page页只做元素抓取和操作方法

page object设计模式中,如何实现页面的跳转?
初始化driver参数,Page类传driver参数

十五、怎样去选择一个下拉框中的value=xx的option?

1.select类里面提供的方法:select_by_value(“xxx”)
2.xpath的语法也可以定位到

十六、什么是断言和验证?

断言(assert):测试将会在检查失败时停止,并不运行后续的检查
优点:可以直截了当的看到检查是否通过
缺点:检查失败后,后续检查不会执行,无法收集那些检查结果状态
验证(vertify):将不会终止测试
缺点:你必须做更多的工作来检查测试结果:查看日志——>耗时多,所以更偏向于断言

十七、你觉得自动化测试最大的缺陷是什么?

不稳定
-可靠性不强
-不易维护
-成本与收益

十八、什么是分层测试?

1.数据层
2.接口层’
3.UI层

十九、webdriver可以用来做接口测试吗?

不可以,webdriver是专门做web的UI自动化参数

二十、get和post 的区别?

1、GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。
2、传输数据的大小
使用GET请求时,传输数据会受到URL长度的限制。
对于POST,理论上是不会受限制的
3、安全性。POST的安全性比GET的高

二十一、三种等待

(1)强制等待
time.sleep(10):如果设置10秒,即使页面已经加载出来了,也不执行操作,必须够10秒才能执行下面的操作
(2)隐形等待
driver.implicitly_wait(30):设置最长的等待时间,在这个时间内加载完成,则执行下一步操作,整个driver的会话期内,设置一次即可,全局可用,应用度上不灵活
(3)显性等待
明确等到某个条件满足后,再去执行下一步操作,程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置最长时间,然后抛出TimeoutException
WebDriverWait()类,显性等待类,
用法:WebDriverWait(driver,等待时间,轮询周期).until()/until_not(判断条件)
1、先确定元素的定位表达式
2、调用WebDriverWait()类设置等待总时长,轮询周期,并调用until()、until_not()方法
WebDriverWait(driver,等待时间,轮询周期).until()/until_not(判断条件)
3、使用ecpected_conditions对应的方法来生成判断条件
EC.类名(定位方式,定位表达式)
例:等待百度登陆的弹框出现,再去操作弹出框

#显性等待需要引入三个库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
id="TANGRAM__PSP_11__footerULoginBtn"
#显性等待判断
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,id)))
driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click()
driver.quit()

二十二、三种切换操作

python UI自动化测试-----常见面试题汇总相关推荐

  1. python 接口自动化测试-----常见面试题汇总

    1.软件接口是什么? 程序不同模块之间传输数据并作处理的类或函数 2.HTTP 和 HTTPS 协议区别? 答: https 协议需要到 CA(Certificate Authority,证书颁发机构 ...

  2. APP UI自动化测试常见面试题,或许有用呢~

    1.Android APP 内存不足时,如何获得内存? 系统优先结束被挂起(暂停)的进程,释放内存. 2.APP 测试常见问题有哪些?原因有哪些? 常见的有 crash.ANR(应用无响应.卡死),一 ...

  3. APPUI 自动化测试-----常见面试题汇总

    1.Android APP 内存不足时, 系统如何结束进程获得内存? 系统优先结束被挂起(暂停)的进程,释放内存 2.APP 测试常见的严重问题有哪些? 分别引起的原因有哪些? 常见的有 crash. ...

  4. java中级程序员面试题_中级Java程序员常见面试题汇总

    下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试. 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  5. for vue 一行2列_vue常见面试题汇总

    点击"卓跃教育",选择"星标?" 在看|星标|留言,  真爱 今天跟大家分享下Vue常见面试题的知识. 1.vue优点? 答:轻量级框架:只关注视图层,是一个构 ...

  6. 高级自动化测试常见面试题(Web、App、接口)

    一.Web自动化测试 1.Selenium中hidden或者是display = none的元素是否可以定位到? 不能,可以写JavaScript将标签中的hidden先改为0,再定位元素 2.Sel ...

  7. 自动化测试常见面试题

    这里写目录标题 1.1.Selenium WebDriver查找页面元素及元素操作 1. Web自动化测试 2.Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的 ...

  8. web自动化测试常见面试题

    一.找不到元素可能出现的原因: 1.元素表达式错误 2.不在指定的frame 3.等待时间短,页面加载速度慢 4.执行脚本打开了新的页面,不在指定的窗口中 二.优化web自动化测试效率 避免使用强制等 ...

  9. 简述isodata算法的原理_算法常见面试题汇总(一):概率论与数理统计部分

    初级或中级算法岗面试题主要有四类:数理统计基础.机器学习模型原理.编程能力.项目经验.项目经验因人而异,所以仅总结前三个方面的基础知识,分享给朋友.(高级或资深算法岗面试内容不在本文范围内) 1.大数 ...

  10. 一套让我成功拿下21k13薪offer的自动化测试常见面试题

    你如何评估测试覆盖率? 答:可以通过代码行覆盖率.分支覆盖率.路径覆盖率等指标来评估测试覆盖率. 你如何评估自动化测试的效果? 答:可以通过测试用例执行情况.缺陷发现率.测试时间和成本等指标来评估自动 ...

最新文章

  1. 方德系统装exe文件_CAXA CAD与国产操作系统全面适配
  2. 悲催的IE6,悲催的壳浏览器,悲催的搜狗,悲催的360
  3. 数据结构源码笔记(C语言):二叉树遍历
  4. 用GDB调试程序(三)
  5. Linux网络管理基本
  6. idea怎么将本地文件和远程git对比_IDEA新建本地项目关联远程git仓库
  7. DeepMind最新研究:如何将「大语言模型」 训练到最优?
  8. Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)
  9. Python 命令行库的大乱斗 | 凌云时刻
  10. 北师计算机应用基础开放作业,北师大计算机应用基础开放作业答案
  11. 西门子定时器有几种_西门子定时器类型
  12. STM8L HALT与IWDG同时使用问题
  13. POJ1251 Jungle Roads(kru)
  14. OpenCV中踩过的坑系列 01- Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
  15. 华为mate30是不是鸿蒙系统,这个意味着是不是鸿蒙系统?
  16. android手机只有三星采用实体键,三星新配件:你终于可以体面地使用实体全键盘了...
  17. 奥鹏20春季1903C语言,奥鹏南开大学 20秋学期(1709、1803、1809、1903、1909、2003、2009 )《程序设计基础(下)》在线作业...
  18. Cadence LDO capless 电路,包括版图,已通过lvs ,drc检查,个人流片过,包括偏置全电路
  19. 软工专硕考研_18武汉理工大学软工专硕考研经验分享(学渣版)
  20. 我的新书——《PHP程序员面试笔试宝典》

热门文章

  1. 哪所985计算机专业招文科,4张表看透36所985大学自主招生专业,收藏起来做备考材料!...
  2. C语言(爱心表白代码)
  3. 9gag for android,GitHub - Mixiaoxiao/9GAG: 9GAG-Android (unofficial), Android Design.
  4. torch的maximum与max以及导出onnx
  5. 如何在单片机中用汇编优雅的点灯
  6. python实现排列组合问题
  7. win8metro应用磁贴背景修改说明
  8. 刚刚!马云泪洒现场:青山不改,绿水长流,我要换个江湖了!后会有期!
  9. swf播放器 android8,网极swf安卓8.0版本-新版网极swf播放器支持安卓8.0下载-游戏大玩家...
  10. 腾讯云服务器搭建鸿蒙Hi3861开发板开发环境