意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

selenium css xpath高级定位方法

来源:恒创科技 编辑:恒创科技编辑部
2022-09-22 00:08:00
新增超级定位法:解决了我们系统的“id变化,系统界面变化、功能新增、某些id name都无法定位的问题。下xpath高级定位。以下标颜色均为最常用定位方法:--------------Css基础定位>>>>>start

1)绝对路径 在DOM中的具体位置

findElement(by.cssSelector(“html body div form input”))

或findElement(by.cssSelector(“html>body>div>form>input”))


selenium css xpath高级定位方法

2)相对路径

driver.findElement(By.cssSelector("input"));第一个input元素。

driver.findElement(By.cssSelector("input.login")); html标签.class的属性值

3)相对Id选择器

driver.findElement(By.cssSelector("input#username"));html标签#id

driver.findElement(By.cssSelector("#username"));只是#id

4)属性

driver.findElement(By.cssSelector("input[name=username]"));使用name属性

driver.findElement(By.cssSelector("img[alt='Previous']"));使用alt属性

driver.findElements(By.cssSelector("img[alt]"));通过属性名称查找,页面所有img含 有alt属性的标签

driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));联合多个属

driver.findElements(By.cssSelector("img:not([alt])"));使用伪类

5)部分属性 (对于页面上有动态变化的属性的元素是非常有用的)

^= driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id头部 如ctrl_12

$= driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id尾部 如a_ctrl

*= driver.findElement(By.cssSelector(Input[id *=‘ ctrl’]));匹配到id中间如1_ctrl_12

--------------Css高级定位>>>>>start

1)查询子元素

WebElement userName = driver.findElement(By.cssSelector("form#loginForm > input"));

WebElement userName = driver.findEleme(By.cssSelector("form#loginForm :nth-child(2)"));

:first-child 定位表单第一个子元素

:last-child 定位表单最后一个子元素

:nth-child(2) 定位表单中第二个子元素

2)使用伪类

driver.findElement(By.cssSelector("input:focus")); 也可使用hover active

:enable input:enable 定位属性为enable的input元素

:disable input:disable 定位属性为disable的input元素

:checked input:checked 定位有多选框属性为checked的元素

3)查询兄弟元素

driver.findElement(By.cssSelector("#nv a + b")); 定位到a 再定位到和它相邻的b

--------------xpath基础定位>>>>>start

(Xpath可以向前向后查询DOM结构,css只能向前)

1)绝对路径

driver.findElement(By.xpath("html/body/div/div/form/input"));//如果发生结构改变则

2)相对路径

driver.findElement(By.xpath("//input"));//假设在DOM中的第一个

3)使用索引

driver.findElement(By.xpath("//input[2]"));//找第二个input元素

4)属性值

driver.findElement(By.xpath("//input[@id='username']"));//使用id属性匹配

driver.findElement(By.xpath("img[@alt='Previous']"));//使用alt属性

driver.findElement(By.xpath ("//input[@type='submit'][@value='Login']"));//联合多个属性

WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'and @value='Login']"));//使用and联合查询

WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'or @value='Login']"));//使用or选择查询

5)属性名称

List imagesWithAlt = driver.findElements (By.xpath ("img[@alt]"));//使用属 性名称 img中带有alt属性的元素

--------------xpath高级定位>>>>>start

6)部分属性值

starts-with() driver.findElement(By.XPath(“input[starts-with(@id,’ctrl’)]”));

ends-with() driver.findElement(By.XPath(“input[ends-with(@id,’ctrl’)]”));

contains() starts-with() driver.findElement(By.XPath(“input[contains(@id,’ctrl’)]”));

7)使用值匹配任意元素属性值

driver.findElement(By.xpath("//input[@*='username']"));任意属性名称为username的元素

8)XPath轴 借住于元素与元素之间的关系定位

ancestor //td[text()=’Product1’]/ancestor::table 选择当前节点所有的父类元素

属性 名称 元素

descendant //table/descendant::td/input 选择当前节点所有子元素

following //td[text()=’Product1’]/following::tr 选择当前元素结束标签后的所有元素

following-sibling //td[text()=’Product1’]/following-sibling::td 当前元素后的兄弟元素

preceding //td[text()=’$150’]/preceding::tr 当前节点开始标签之前的所有节点

preceding-sibling //td[text()=’$150’]/preceding-sibling::td 当前借点之前的所有同级节点

定位单元格元素

方式:

table:定义表格

caption:表格标题

th:表头

tr:行

td:单元

thead:页眉

tbody:主题

tfoot:页脚

col:列的属性

colgroup:列的组

findElement将会查询整个DOM 最终返回第一个找到的匹配的元素

findElement可以查询子类,缩写为

driver.findElement(By.id("div1")).findElement(By.linkText("top"));

查找一个元素 查找这个元素下的子类top

当findElement找不到元素时。抛出NoSuchElementFoundException

findElements()方法返回所有匹配定位策略的WebElement的集合,我们可以使用java中List类来创建WebElements的实例,实现查找多个元素:

List links = driver.findElements(By.cssSelector("#nv a"));

更新终结定位法,绝对原创,往常都是假的这次绝对真实,通过文本定位,如下图:

二个尖括号中的内容对应的元素如何定位呢?此问题主要解决了我们系统的“id变化,系统界面变化、功能新增、某些id name都无法定位的问题。<span id='1'>日志</span>

selenium css xpath高级定位方法_css

问题:直接使用id方法无法识别元素?

解决:先定位上级且能证明此元素是唯一的。如上图咱们可以选择 id='westpanel',当然选择 id='ext-gen29'也可以。接下来定位下级。

问题:尖括号里的文字连接做为唯一的对象,如何定位?

解决:找到要定位的文字,文字所属的标签和文字元素的上级,然后如下图:文字标签上级[文字元素所属标签=‘值’]/标签名。

意思是选取div下的一个 (span='审计日志‘)

selenium css xpath高级定位方法_css_02



上一篇: 租用美国服务器:潜在的风险与应对策略。 下一篇: MongoDB 5.0 扩展开源文档数据库操作