目录
元素定位
八大元素定位法则
id webdriver.find_element(By.ID, 'id')
name webdriver.find_element(By.NAME, 'name')
tagname webdriver.find_element(By.TAG_NAME, 'tagname')
classname webdriver.find_element(By.CLASS_NAME, 'class')
link text webdriver.find_element(By.LINK_TEXT, 'linktext')
partial link text webdriver.find_element(By.PARTIAL_LINK_TEXT, 'partlinktext')
css selector webdriver.find_element(By.CSS_SELECTOR, '.search-result-item-field span:nth-of-type(2)'))
xpath webdriver.find_element(By.XPATH, '//div[@class="head"]')
xpath语法与css selector语法
XPath(XML Path Language)和CSS选择器(Cascading Style Sheets Selector)是用于定位和选择HTML和XML文档中元素的两种常用方法。它们具有相似的功能,但语法不同,适用于不同的场景。以下是XPath和CSS选择器的语法以及它们之间的主要区别:
XPath 语法:
使用双斜杠 // 表示从根节点开始的全局搜索。例如://div 选择文档中的所有 <div> 元素。
使用方括号 [ ] 表示筛选条件。例如://div[@class='example'] 选择所有 class 属性为 'example' 的 <div> 元素。
使用 / 表示从当前节点的子节点中查找。例如:/html/body/div 选择 <html> 元素下的 <body> 元素,然后再选择其子节点中的 <div> 元素。
使用 @ 符号来访问元素的属性。例如://a[@href] 选择所有带有 href 属性的 <a> 元素。
CSS Selector 语法:
使用标签名称来选择元素。例如:div 选择文档中的所有 <div> 元素。
使用 # 符号来选择具有指定 id 属性的元素。例如:#example 选择 id 为 'example' 的元素。
使用 . 符号来选择具有指定类名的元素。例如:.highlight 选择 class 为 'highlight' 的元素。
使用 > 符号来选择子元素。例如:ul > li 选择 <ul> 元素下的所有直接子 <li> 元素。
区别:
语法差异:XPath 使用路径表达式来描述元素的位置,包括 / 和 // 等符号,而CSS选择器使用更类似于CSS样式表的选择器,包括标签名、类名、id等。
性能:通常情况下,CSS选择器在现代浏览器中的性能更好,因为浏览器内置了对CSS选择器的优化。XPath在某些情况下可能会导致较慢的性能。
功能:XPath提供了更丰富的功能,可以进行更复杂的节点选择和筛选。它可以用于遍历XML文档的任何部分。相比之下,CSS选择器更适合简单的元素选择和样式选择。
跨浏览器兼容性:CSS选择器通常在所有主流浏览器中都受支持,而XPath在某些情况下可能在不同浏览器之间存在差异。
元素定位异常原因分析
元素不存在或不可见:最常见的原因之一是元素在页面上不存在或不可见。这可能是因为页面加载尚未完成,元素被动态加载,或者元素在不同的页面状态下可见与不可见。
定位表达式错误:定位元素时,使用的XPath或CSS选择器表达式可能包含错误,无法匹配任何元素。检查定位表达式,确保它正确匹配目标元素。
页面结构变化:如果页面结构发生变化,例如元素的ID、类名或位置发生变化,之前编写的定位表达式可能会失效。需要更新定位表达式以适应新的页面结构。
定位冲突:如果有多个元素具有相同的定位属性,测试框架可能无法确定要选择哪个元素,导致定位冲突。在这种情况下,需要更具体的定位表达式来唯一标识目标元素。
等待时间不足:在测试脚本中,有时需要等待一段时间,直到元素变得可见。如果等待时间设置不足,测试框架可能会在元素可见之前尝试进行定位,导致异常。
浏览器兼容性问题:不同的浏览器可能在元素定位上存在差异。确保测试脚本在不同浏览器上进行充分测试,或使用跨浏览器测试工具。
动态内容:页面上的动态内容可能会导致元素的位置或属性在不同时间点发生变化。这需要使用合适的等待机制来等待元素的出现或状态变化。
定位性能问题:某些页面可能包含大量元素,或者使用复杂的XPath表达式,这可能会导致定位性能问题。考虑优化定位表达式以提高性能。
测试环境问题:有时元素定位异常可能是由于测试环境的问题,例如网络连接问题、服务器响应延迟等引起的。
测试脚本问题:最后,定位异常也可能是由于测试脚本本身的问题,例如错误的测试步骤或逻辑错误引起的。
三层模式
BasePage 提供通用的基础方法,包括打开浏览器url,关闭webdriver等
业务页面 基于BasePage编写实际页面元素的定位和操作代码
测试代码 基于业务页面的各个元素操作代码,拼接操作流程进行测试结果判断
关键字驱动与POM的区别
POM只能针对UI进行
关键字驱动可以实现一对多的自动化,POM属于为单个项目定制化
关键字驱动关注测试行为,POM关注测试流程