5年测试,一问三不知,还当场怒怼面试官:“不想录用你就直说?!”

1128 篇文章 46 订阅
693 篇文章 11 订阅
一位在大厂担任面试官的朋友分享了他的面试经历,发现许多具有多年经验的软件测试工程师在自动化测试和前沿技术方面知识欠缺。面试中,即便是基础的Selenium八大定位法,如id、name、class_name等,部分候选人也无法清晰阐述。这揭示了当前某些测试人员在技术深度和广度上的不足,特别是在自动化测试和行业最新动态的关注上。
摘要由CSDN通过智能技术生成

寻思着已经“金三银四”了,赶紧跟在大厂当面试官的朋友聊聊今年行业趋势,问问对入行软测是如何看的,哪知道刚问就先引来了朋友的一顿牢骚。

他跟我说:

“最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。”

“在沟通中发现,由于年限不小,他们的定位基本都是高级及以上,毕竟,年限摆在那里,面个中级也不体面。”

“面试时我打算聊点基础的,先打开一下话题,结果没想到我一问,不提测试工具,仅仅基础的技术很多也知之不详。5年的工作经验仅仅是功能测试堆起来的,毫无深度,对于APP自动化等等一问三不知,都停留接口测试的基础方法层面上,自动化进阶问题更是一问一个死,前沿技术最新动态也毫无关注。”

我问他:

“你问了啥啊,是你不想招,就故意出难题吧?”

他急忙解释道:

“什么出难题,我就问个Selenium 八大定位法,就支支吾吾说不清了!”

我没在继续问了,心想,这不至于吧?

定位法

selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text、partial_link_text、xpath、css

简单的定位可以用id、name、class_name、tag_name等,如果遇到复杂的元素需要定位则要使用xpath、或者css定位

为了防止真的有同学不清楚这8种定位法,下面是每种定位的用法:

ID定位

HTML Tag 的 id 属性值是唯一的,故不存在根据 id 定位多个元素的情况。下面以在百度首页搜索框输入文本“python”为例。搜索框的 id 属性值为“kw”,如图1.1所示:

代码如下,“find_element_by_id”方法已废弃,

使用find_element(By.ID, 'kw')

from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Firefox()# 需要将浏览器驱动添加到环境变量中# 打开百度driver.get('https://www.baidu.com/')# 通过id,在搜索输入框中输入文本“python”driver.find_element(By.ID, 'kw').send_keys('python')# 点击搜索driver.find_element(By.ID, 'su').click()# 关闭浏览器driver.close()

name 定位

以上百度搜索框也可以用 name 来实现,如图 1.1 所示,其 name 属性值为“wd”,方法“find_element(By.NAME, 'wd')”表示通过 name 来定位

代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# 通过name,在搜索输入框中输入文本“自动化测试”driver.find_element(By.NAME, 'wd').send_keys('自动化测试')# 点击搜索driver.find_element(By.ID, 'su').click()# 关闭浏览器driver.close()

注意:用 name 方式定位需要保证 name 值唯一,否则定位失败。

class 定位

以百度首页搜索框为例,如图 1.1所示,其 class 属性值为“s_ipt”,“By.CLASS_NAME, 's_ipt'”表示通过 class_name 来定位

代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# 通过class,在搜索输入框中输入文本“web测试”driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('web测试')# 点击搜索driver.find_element(By.ID, 'su').click()# 关闭浏览器driver.close()

link_text 定位

link_text 是以超链接全部名字作为关键字来定位元素的。以百度首页“新闻”超链接为例,如图 1.2 所示,关键字为“新闻”。

代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# 通过link_text定位,点击‘新闻’超链接driver.find_element(By.LINK_TEXT, '新闻').click()# 关闭浏览器driver.close()

注意:用此方法定位元素超链接,中文字需要写全。

partial_link_text 定位

即用超链接文字的部分文本来定位元素,类似数据库的模糊查询。以“新闻”超链接为例,只需“新”一个字即可,即取超链接全部文本的一个子集。

代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# 通过partial_link_text定位,用超链接文字的部分文本来定位元素,类似数据库的模糊查询driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()# 关闭浏览器driver.close()

tag_name 定位

tag_name 定位即通过标签名称定位,如图 1.6所示,定位标签“form”并打印标签属性值“name”。

代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# tag_name 定位即通过标签名称定位print(driver.find_element(By.TAG_NAME, 'form').get_attribute('name'))

成功后控制台输出“f”:

CSS 定位

CSS 定位的优点是速度快、语法简洁。表 1.1 中的内容出自 W3School 的 CSS 参考手册。CSS 定位的选择器有十几种,在本节中主要介绍几种比较常用的选择器。

仍以百度搜索框为例,代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')#  以class选择器为例,实现CSS定位,在搜索框输入“python3”driver.find_element(By.CSS_SELECTOR, '.s_ipt').send_keys('python3')#  以id定位语法结构为:#加 id 名,实现CSS定位,在搜索框输入“python3”driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('python3')# CSS 定位主要利用属性 class 和 id 进行元素定位。也可以利用常规的标签名称来定位,如输入框标签“input”,在标签内部又设置了属性值为“name=’wd’”driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')# CSS 定位方式可以使用元素在页面布局中的绝对路径来实现元素定位。百度首页搜索输入框元素的绝对路# 径为“html>body>div>div>div>div>div>form>span>input[name="wd"]”driver.find_element(By.CSS_SELECTOR, 'html>body>div>div>div>div>div>form>span>input[name="wd"]').send_keys('python3')# CSS 定位也可以使用元素在页面布局中的相对路径来实现元素定位。相对路径的写法和直接利用标签名称来定位,两者# 的代码实现的功能是一致的driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')# 点击搜索driver.find_element(By.ID, 'su').click()# 关闭浏览器driver.close()

XPath 定位

通过 XPath 来定位元素的方式,对比较难以定位的元素来说很有效,几乎都可以解决,特别是对于有些元素没有 id、name 等属性的情况。

XPath 是 XML Path 语言的缩写,是一种用来确定 XML 文档中某部分位置的语言。它在 XML 文档中通过元素名和属性进行搜索,主要用途是在 XML 文档中寻找节点。XPath定位比 CSS 定位有更大的灵活性。XPath 可以向前搜索也可以向后搜索,而 CSS 定位只能向前搜索,但是 XPath 定位的速度比 CSS 慢一些。

XPath 语言包含根节点、元素、属性、文本、处理指令、命名空间等。以下文本为 XML实例文档,用于演示 XML 的各种节点类型,便于理解 XPath。

<?xml version = "1.0" encoding = "utf-8" ?><!-- 这是一个注释节点 --><animalListtype="mammal"><animalcategoruy = "forest"><name>Tiger</name><size>big</size><action>run</action></animal></animalList>

其中为文档节点,也是根节点;为元素节点;type=“mammal”为属性节点。

节点之间的关系:

• 父节点。每个元素都有一个父节点,如上面的 XML 示例中,animal 元素是 name、size,以及 action 元素的父节点。

• 子节点。与父节点相反,这里不再赘述。

• 兄弟节点,有些也叫同胞节点。它表示拥有相同父节点的节点。如上代码所示,name、size 和 action 元素都是同胞节点。

• 先辈节点。它是指某节点的父节点,或者父节点的父节点,以此类推。如上代码所示,name 元素节点的先辈节点有 animal 和 animalList。

• 后代节点。它表示某节点的子节点、子节点的子节点,以此类推。如上代码所示,animalList 元素节点的后代节点有 animal、name 等。

仍以百度搜索框为例,代码如下:

driver = webdriver.Firefox()# 打开百度driver.get('https://www.baidu.com/')# XPath 有多种定位策略,最简单直观的就是写出元素的绝对路径。driver.find_element(By.XPATH, '/html/body/div/div/div/div/div/form/span/input').send_keys('python3')# XPath还可以使用元素的属性值来定位。//input 表示当前页面某个 input 标签,[@id='kw'] 表示这个元素的 id 值是 kw。driver.find_element(By.XPATH, "//input[@id='kw']").send_keys('python3')# 如果一个元素本身没有可以唯一标识这个元素的属性值,我们可以查找其上一级元素。# form[@class='fm  has-soutu']通过 class 定位到父元素,后面的/span/input 表示父元素下面的子元素。driver.find_element(By.XPATH, "//form[@class='fm  has-soutu']/span/input").send_keys('python3')# 如果一个属性不能唯一区分一个元素,那么我们可以使用逻辑运算符连接多个属性来查找元素driver.find_element(By.XPATH, "//input[@id='kw' and @class='s_ipt']").send_keys('python3')# 点击搜索driver.find_element(By.ID, 'su').click()# 关闭浏览器driver.close()

后话

每一种定位方式都有其特殊的用法,只要掌握其特殊性即可。需要在项目中多用多想、总结经验,时间久了会对这些定位方式有更深的理解。

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我们的测试交流群大家一起讨论交流学习。【点击下方小卡片进群免费领取~】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值