关于selenium:selenium-定位总结

31次阅读

共计 3397 个字符,预计需要花费 9 分钟才能阅读完成。

原文由周小丽发表于 TesterHome 社区,点击原文链接能够和作者间接交换

xpath 有两种示意办法,绝对路径和相对路径,绝对路径是指从根开始,以 / 开始,如 /html/body/div,相对路径是指在一个门路下,另外的门路以这个门路作为参照,以 // 开始。测试时,个别应用相对路径查找元素 (装置 ChroPath 插件,能够查找 xpath 门路)。
xpath 用法来源于:https://www.cnblogs.com/purel…

怎么进步 selenium 脚本的自动化执行效率?

1、优化测试用例,尽可不应用 sleep,缩小应用 ImplicitlyWait,而应用 selenium 的 wait/FluentWait,这样能够优化等待时间
2、应用 selenium grid,通过 testng 实现并发执行
3、针对一些不稳固的动静控件通过 JS 实现操作
4、重载 testng 的 listener 实现 retry 机制,进步测试用例成功率

xpath 根本用法:

1、属性定位 示意办法:// 标签名 [@ 属性名 = 属性值],通过繁多的属性即可查找到元素。如:查找输出文本框,//input[@id=’kw’]

2、and 组合属性定位 示意办法:// 标签名 [@ 属性名 1= 属性值 and 属性名 2= 属性值],当繁多属性无奈定位惟一元素时,能够组合多个属性进行查找。如:查找输出文本框,//input[@name=’wd’ and @class=s_ipt]

3、通过父元素找子元素 示意办法:// 父元素 / 子元素,当查找的元素没有特色属性时,其父元素有特色属性时,能够通过其父元素往下查找。如:查找输出文本框,//span[@id=’s_kw_wrap’]/input

4、通过先人元素找子孙元素 示意办法:// 先人元素 // 子孙元素,当查找的元素没有特色属性时,其先人元素有特色属性时,能够通过其先人元素往下查找。如:查找输出文本框,//span[@id=’s_kw_wrap’]//input

5、通过子元素找父元素 示意办法:// 子元素 /..,当查找的元素没有特色属性,其子元素有特色属性时,能够通过其子元素往上查找。如:查找输出文本框的父元素,//input[@id=’kw’]/..

6、通过文本定位,示意办法:// 标签名 [text()= 文本内容](text 前不须要加 @ 符号),常常和 contains() 组合应用。如,定位【新闻】对应的 a 标签,//a[text()=’ 新闻 ’]

7、通过 contains 含糊匹配定位,示意办法:// 标签名 [contains(属性或文本, 内容)]。如,定位页面中的【设置】元素,//span[contains(@name, ‘tj’)]

8、通过索引 [] 定位 (留神:1、加括号;2、索引从 1 开始),如,定位【学术】对应的 a 标签,(//a[@class=’mnav c-font-normal c-color-t’])[7]

9、罕用的轴运算,示意办法:轴关系:: 标签名称
ancestor:以后元素的所有先人元素(父、祖父等),如:通过【设置】查找其父级 div 元素,//span[@id=’s-usersetting-top’]//ancestor::div[@id=’u1′]

following-sibling:以后元素之后的所有同级元素,如:查找【直播】之后的同级元素,//a[contains(text(), ‘ 直播 ’)]//following-sibling::a

preceding-sibling:以后元素之前的所有同级元素,如:查找【直播】之前的同级元素,//a[contains(text(), ‘ 直播 ’)]//preceding-sibling::a

selenium 之 CSS 定位汇总

定位输入框
一:繁多属性定位
1:type selector
driver.find_element_by_css_selector(‘input’)

2:id 定位
driver.find_element_by_css_selector(‘#kw’)

3:class 定位
driver.find_element_by_css_selector(‘.s_ipt’)

4:其余属性定位
driver.find_element_by_css_selector(‘[name=’wd’]’)
driver.find_element_by_css_selector(“[type=’text’]”)

二:组合属性定位

1:id 组合属性定位
driver.find_element_by_css_selector(“input#kw”)

2:class 组合属性定位
driver.find_element_by_css_selector(“input.s_ipt”)

3:其余属性组合定位
driver.find_element_by_css_selector(“input[name=’wd’]”)

4:仅有属性名,没有值也能够
driver.find_element_by_css_selector(“input[name]”)

5:两个其余属性组合定位
driver.find_element_by_css_selector(“name=’wd'”)

三种期待的用法

ImplicitlyWait(隐式期待)

driver.implicitly_wait(10) # 设置隐式等待时间为 10s
是指对整个页面的加载,隐式期待在 driver 的整个生命周期内都无效。
也就是说,driver 在没有被 close() 之前,定位每个元素时,都会有隐式期待的 10s,也就是说,只须要设置一次,所有的元素都可有最多 10s 的期待加载的工夫
可是隐式期待仍然存在一个问题,那就是程序会始终期待整个页面加载实现,也就是通常情况下你看到浏览器标签栏那个小圈再也不转,才会执行下一步,但有时候页面想要的元素早就在加载实现了,可是因为个别 js 之类的货色特地慢,我仍得等到页面所有实现能力执行下一步。因而,这里 webdriver 提供了一种更加智能的期待形式:显示期待 spa

Explicit Wait(显式期待)

wait = WebDriverWait(driver, 10) # 设置显示等待时间为 10s
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ‘#kw’)))# 判断条件
element.send_keys(“Python”)
补救了 implicit wait 的有余,可能通过判断一些条件,再去决定是否期待上来,显示期待是一种智能程度较高的期待形式,可能无效的增强脚本的健壮性

Fluent wait(晦涩期待,即显式期待的一种)

能够设置本人的办法去解决各种期待的问题。

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                // 最大等待时间是 60 秒
                   .withTimeout(60, TimeUnit.SECONDS)
             // 每隔两秒去找一次元素 ele1 是否在页面显示
                   .pollingEvery(2, TimeUnit.SECONDS)
             // 并且疏忽 NoSuchElement 异样
                   .ignoring(NoSuchElementException.class);
             //ele1 定位过程应用了对象 wait
        WebElement ele1 = wait.until(new Function<WebDriver, WebElement>() {
             // 一个期待的条件
             public WebElement apply(WebDriver driver) {return driver.findElement(By.id("xxxxxxx"));
             }       
           });

下面创立了一个 FlentWait 类的一个对象 wait,最大等待时间是 60 秒,每隔两秒去找一次元素 ele1 是否在页面显示。并且疏忽 NoSuchElement 异样。上面的元素定位,ele1 定位过程应用了对象 wait,而后外面新建了一个函数,只须要把这个函数当做是一个期待的条件就很好了解。

以上是明天的分享,你学废了吗~
想学习更多干货常识和前沿技术?
想结识测试行业大咖和业界精英?
欢送关注 2022 MTSC 大会(第十届中国互联网测试开发大会)↓↓↓

正文完
 0