自动化测试面试100问

自动化测试面试100问

基于python+Selenium+Unittest+BeatifulReport框架实现

1.等待相关
1)隐式等待:imlpicitlyWait:webdriver 会在指定的超时时间范围内不断的查找元素,直到找到元素或超时
2)显式等待:通常是我们自定义的一段代码,这段代码用来等待某种条件发生后,再继续执行后续的代码
3)强制等待:timesleep(5)
4)线程等待:如Thread.sleep(2),webdriver线程强制休眠2秒钟,2秒过后,再执行后续的代码。
5)显示等待与隐式等待区别
隐式等待:是设置的全局等待。是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

显示等待:是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。
1.一个全局 一个正对单个元素
2.一个不停的刷新页面,一个有时间间隔去操作

2.selenium中hidden或者是display = none的元素是否可以定位到?

不可以,想点击的话可以用js去掉dispalay=none的属性,定位到该元素,然后再进行js操作;

js='document.getElementById(\"bs3Select\").style.display='';'
driver.execute_script(js)

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

4.Selenium有几种定位方式?你最偏爱哪一种,为什么?
Selenium有八种单数定位方式:
name、class_name、tag_name、link_text、partitial_link_text、id、xpath、css_selector;

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

5.selenium中如何判断元素是否存在?

1.find_elements方法判断

from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
def is_element_exist(css):
    s = driver.find_elements_by_css_selector(css_selector=css)
    if len(s) == 0:
        print "元素未找到:%s"%css
        return False
    elif len(s) == 1:
        return True
    else:
        print "找到%s个元素:%s"%(len(s),css)
        return False

2.捕获异常 try except

def isElementExist(css):
    try:
        driver.find_element_by_css_selector(css)
        return True
    except:
        return False

3.百度输入框为例

判断页面上有无id为kw的元素:

if is_element_exist("#kw"):
    driver.find_element_by_id("kw").send_keys("yoyoketang")

判断页面有无标签为input元素:

if is_element_exist("input"):
    driver.find_element_by_tag_name("input").send_keys("yoyoketang")

判断页面有无id为xxx的元素:`

if is_element_exist("xxx"):
    driver.find_element_by_id("xxx").send_keys("yoyoketang")

4.is_enable\is_checked\is_displayed
是否可编辑、勾选、可见

6.如何去定位页面上动态加载的元素?
通过wait模块中的WebDriverWait类提供的until循环的去判断是否出现了要用的元素
首先触发动态事件,然后再定位。
如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)

7.如何去定位属性动态变化的元素?
先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位

8.怎样去选择一个下拉框中的value=xx的option?
1.select类里面提供的方法:select_by_value(“xxx”)

s1 = Select(driver.find_element_by_id('selectId'))      # 查找select下拉框并实例化Select
s1.select_by_index(0)  # 选择第一项:1
s1.select_by_value("2")  # 选择value="2"的项
s1.select_by_visible_text("3")  # 选择text="3"对应项
driver.quit()

2.xpath的语法也可以定位到
3.通过两次click可以做到

9.XPath中使用单斜杠和双斜杠有什么区别?
如果XPath是从文档节点开始,它将允许创建“绝对”路径表达式。例如 “/ html / body / p”匹配所有的段落元素。
如果XPath在文档中的任意位置开始进行选择匹配,那么它将允许创建“相对”路径表达式。
例如 “// p”匹配所有的段落元素。

10.失败截图的原理是什么?

11.什么是Selenium的CSS定位器策略?用例子来解释
CSS位置策略可以与Selenium一起使用来定位元素,它使用CSS定位方法,其中 -

绝对路径用 - (空格符号)
相对路径用 - >表示
ID,类,名称也可以用于XPath:
css=input[name=’q’]
css=input[id=’lst-ib’] or input#lst-ib
css=input[class=’lst’] or input.lst
如果id / name / class只有一部分是常量:css=input[id*=’lst-ib’)]
使用内部文本的元素位置策略:css = a:contains(‘log out’)

12.你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?
有时候我们知道元素定位表达式没有问题,但是还是提示no such element,那么我们就需要考虑这个元素是否在frame中。如果在,我们就需要从topwindow,通过swithcTo.Frame()方法来切换到目标frame中,可以通过frame的name和id和索引三种方法来定位frame。

driver.switch_to.frame('top-frame') #frame 名
driver.switch_to.parent_frame() #返回上一层
driver.switch_to.default_content()  #回到默认层 最外层

13.什么是XPath?什么时候应该在Selenium中使用XPath?
XPath是一种在HTML / XML文档中定位的方法,可用于识别网页中的元素。如果没有与页面上的元素相关联的名称/ ID,或者名称/ ID的一部分是常量,则必须使用XPath。
绝对路径用 - / 单斜杠
相对路径用 - // 双斜杠

ID,类,名称也可以用于XPath :
//input[@name=’q’]
//input[@id=’lst-ib’]
//input[@class=’ lst’]

如果id / name / class的一部分是常量 ://input[contains(@id,’lst-ib’)

14.web滑动页面

js = 'window.scrollTo(0,500)'
self.driver.execute_scri

你可能感兴趣的:(自动化测试,1024程序员节)