打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在Selenium WebDriver中查找元素?(二)


话不多说,直接进入主题吧

通过XPATH选择器查找

     在我们的测试自动化代码中,我们通常更喜欢使用id,名称,类等这些定位符。但是,有时我们在DOM中找不到它们中的任何一个,而且有时某些元素的定位符在DOM中会动态变化。在这种情况下,我们需要使用智能定位器。这些定位器必须能够定位复杂且动态变化的Web元素。

    最近,我在努力寻找定位Web元素的方法。在各种环境中使用相同版本的SaaS实例会生成不同的Ids.XPATH选择器助我一臂之力,我主要使用contains()选项来定位Web元素。

编写XPATH选择器还有其他策略。下面简要说明这些内容

绝对和相对XPath

绝对相对的
定位元素的直接方法从DOM元素的中间开始
如果访问元素的路径因位置而改变,则脆性可能会破裂由于搜索相对于DOM相对稳定
以“ /”开头并从根开始以“ //”开头,它可以在DOM中的任何位置开始搜索
较长的XPATH表达式较短的表达
//tag[@attribute='value'] public class LocateByXPATHSel{ public static void main (String [] args){              WebDriver driver = new FirefoxDriver(); driver.get(<url>);// 输入url地址 WebElement el = driver.findElement(By.xpath("xpath=//button[@id='pt1:r1:0:r0:1:AP1:APb']")); // trying to locate a buttton el.click(); } }

使用contains()

这是非常方便的XPath Selenium定位器,有时可以节省测试自动化工程师的生命。当元素的属性是动态的时,我们可以将contains()用作web元素的恒定部分,但也可以在需要时在任何情况下使用contains()

融合实例#1

融合实例#2

如果我们比较同一字段,则它具有2个动态生成的ID –

//输入[@ id ='pt1:_FOr1:1:_FONSr2:0:MAnt2:1:pt1:pt_r1:0:pt1:SP1:NewPe1:0:pt_r1:0:r1:0:i1:0:it20::内容']或者// input [@id ='_ FOpt1:_FOr1:0:_FOSritemNode_workforce_management_new_person:0:MAnt2:1:pt1:pt_r1:0:pt1:SP1:NewPe1:0:pt_r1:0:r1:0:i1:0:it20::内容']在这种情况下,我们需要标识动态Web元素的常量部分,即“ Mant2:1:pt1:pt_r1:0:pt1:SP1:NewPe1:0:pt_r1:0:r1:0:i1:0:it20::content”,然后创建XPATH语法,如下所示:
xpath = // input [包含(@id,'Mant2:1:pt1:pt_r1:0:pt1:SP1:NewPe1:0:pt_r1:0:r1:0:i1:0:it20 :: content')]所以在两个实例上都可以使用相同Selenium的记录。公共类LocateByXPATHSel {
公共静态void主(字符串[] args){
WebDriver驱动程序=新的FirefoxDriver(); // Chrome的实例| Firefox | IE驱动
driver.get(<URL>); //打开应用程序
WebElement el = driver.findElement(By.xpath(“ xpath = // input [包含(@id,'Mant2:1:pt1:pt_r1:0:pt1:SP1:NewPe1:0:pt_r1:0:r1:0:i1:0:it20 :: content')]“));
el.sendKeys(“ Johnson”);
}}
[/ java]

以。。开始

此方法检查属性的起始文本。当属性值动态更改时使用非常方便,但是您也可以将此方法用于不变的属性值。当动态Web元素的ID的前缀部分为常数时,这很方便。

语法:

// tag [starts-with(@attribute'value')]范例://输入[starts-with(@id'user')]

我们可以使用“//”双斜杠链接多个相对的XPath声明,以找到元素位置,如下所示。

xpath = // div [@ id ='pt1:_USSpgl5'] // a [@ id ='pt1:_UIScmi4']

组合“和”或“或”运算符

参照上面相同的屏幕截图,我们可以编写如下条件–

xpath = // a [@ id ='pt1:_UIScmi4'或@ class ='xnk xmi']
xpath = // a [@ id ='pt1:_UIScmi4'和@ class ='xnk xmi']

祖先

我们可以使用此选项在特定Web元素的祖先的帮助下查找Web元素。

继兄弟

选择上下文节点的以下同级。

例:

// span [@ class ='xnu'] / ancestor :: div [@ id ='pt1:_USSpgl5'] / following-sibling :: div

在上面的示例中,我们尝试访问“管理”下的所有菜单。

以下

开始在给定父节点之后定位元素。它在以下语句之前找到元素并将其设置为顶部节点,然后开始查找该节点之后的所有元素。

语法:

// tagName [@ attribute = value] //以下:: tagName范例:
// div [@ id ='xx'] //以下::输入因此,基本上,搜索将从id ='xx'的div开始,并在div标签之后搜索所有具有tagname ='input'的元素。

子级

选择当前节点的所有子元素。

要在以下情况下获取所有'li'元素,我们将语法编写为–//ul[@id ='_ FOpt1:_FOr1:0:_FOSritemNode_workforce_management_new_person:0:MAnt2:1:pt1:pt_r1:1:pt1:SP1:Perso2:0:pt_r3:0:soc3 :: pop'] / child:li

选择当前节点之前的所有节点。

语法

// tagName [@ attribute = value] //之前:: tagName

在Selenium WebDriver中查找元素:在元素数组中查找元素

//div[@id ='pt1:r1:0:rt:1r2:0:dynamicRegion1:0:AP1:findByContentItemQueryResultId:_ATp:ciTblR1::db']/table/ tbody / tr / td / div / table / tbody / tr / td [1]

我们可以使用数组的[index]位置访问数组的ith元素。

这或多或少涵盖了用于在网页上定位元素的各种选择器和策略。希望它对您有所帮助,并增加您的知识价值。

如何在Selenium WebDriver中查找元素?(一)
python之函数基础
一篇文章教会你利用Python网络爬虫实现豆瓣电影采集
python接口测试—get请求
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Selenium(四)——webdriver 之定位页面元素
[Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
Python | selenium 的基本操作
Selenium Webdriver定位页面元素的几种方式
Selenium2.0之WebDriver学习总结(2)
selenium webdriver定位不到元素的五种原因及解决办法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服