在Selenium WebDriver中使用By.Xpath快速定位页面元素
2013-12-15 15:52
701 查看
转载:
http://www.51testing.com/html/38/113838-849231.html
以登录页面密码框定位为例,讲解如何在selenium webdriver中通过by.xpath定位页面元素,快速获取元素位置并完成操作。
问题引入:
用Selenium IDE录制后的脚本如下:
回放的时候,页面非常难定位,需要很长时间才能找到密码框并输入密码,如果超时了找不到就会报错。
解决方案:
既然有时候能回放成功,有时候又找不到页面元素,那肯定是这个元素定位不够准确,所以在查找的时候会消耗很长时间,那么通过xpah定位是否可以?
Xpath查找元素对象时有这样一种定位方式,即通过//定位,详情请参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
比如这里密码框是输入框input,想要查找input的位置可以通过//input来实现,如果只是//input则可能会定位到多个input元素,此时就需要通过键值对更精确的定位,语法就是//input[@key=value],即://input[@name='pass']
重新回放,时间仍然很长,看来通过一个元素键值对定位是不可靠的,那能不能通过多个元素呢?就跟QTP中的高级描述性编程一样。那xpath的语法是什么,多个元素键值对怎么连接到一起呢?
首先查找name=pass的这个元素的另外一个元素键值对:class= textfild,用这两个定位一下试试看。
再回访,速度果然快了,很快便识别到了密码框的位置,并且进行了输入。
关于xpath查找元素还可以通过contains(一个字符串查找函数)来实现,语法是
//input[contains(@id,vakue)andcontains(@id,value)],此中的id和value就是定位input元素的键值对
例如:
//input[contains(@class,'textfild') and contains(@name,'pass')]
那最后经过整合和简化,4句的代码可简化为以下两句
为什么能简化为2行呢,看上面的截图,其实一上来的时候密码框里有“密码”两个字,当鼠标移入密码框获取焦点以后,“密码”文字消失,用户就可以输入自己真正的密码。所以
这句话是我们不需要的。因为当密码框获取焦点以后,“密码”文字就消失了,所以下面的清空也没有必要存在了
这样,代码就简化了。
回放,一切ok。
http://www.51testing.com/html/38/113838-849231.html
以登录页面密码框定位为例,讲解如何在selenium webdriver中通过by.xpath定位页面元素,快速获取元素位置并完成操作。
问题引入:
用Selenium IDE录制后的脚本如下:
driver.findElement(By.name("pass")).clear(); driver.findElement(By.name("pass")).sendKeys("密码"); driver.findElement(By.id("passwords")).clear(); driver.findElement(By.id("passwords")).sendKeys("123456"); |
解决方案:
既然有时候能回放成功,有时候又找不到页面元素,那肯定是这个元素定位不够准确,所以在查找的时候会消耗很长时间,那么通过xpah定位是否可以?
Xpath查找元素对象时有这样一种定位方式,即通过//定位,详情请参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
driver.findElement(By.xpath("//input[@name='pass']")).clear(); driver.findElement(By.xpath("//input[@name='pass']")).sendKeys("密码"); driver.findElement(By.xpath("//input[@id= passwords]")).clear(); driver.findElement(By.xpath("//input[@id= passwords]")).sendKeys("123456"); |
首先查找name=pass的这个元素的另外一个元素键值对:class= textfild,用这两个定位一下试试看。
driver.findElement(By.xpath("//input[@name='pass'and@class=’ textfild’]")).clear(); driver.findElement(By.xpath("//input[@name='pass'and@class=’ textfild’]")).sendKeys("密码"); driver.findElement(By.xpath("//input[@id= passwordsand@class=’ textfild required’]")).clear(); driver.findElement(By.xpath("//input[@id=passwordsand@class=’textfild required’]")).sendKes(“12..”); |
关于xpath查找元素还可以通过contains(一个字符串查找函数)来实现,语法是
//input[contains(@id,vakue)andcontains(@id,value)],此中的id和value就是定位input元素的键值对
例如:
//input[contains(@class,'textfild') and contains(@name,'pass')]
那最后经过整合和简化,4句的代码可简化为以下两句
driver.findElement(By.xpath("//input[contains(@class,'textfild')andcontains(@name,'pass')]")).clear(); driver.findElement(By.xpath("//input[@id='passwords'and@class='textfild required'and@type='password']")).sendKeys("123456"); |
driver.findElement(By.xpath("//input[@name='pass'and@class=’ textfild’]")).sendKeys("密码"); |
driver.findElement(By.xpath("//input[@id= passwordsand@class=’ textfild required’]")).clear(); |
回放,一切ok。
相关文章推荐
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- selenium webdriver xpath 定位页面元素
- selenium webdriver by xpath 定位元素
- 【selenium webdriver】 XPath 多条件查询语句(处理同一个页面上出现相同文本按钮的动态ID元素定位)
- Webdriver自动化测试使用Xpath-Helper调试页面元素的xpath
- selenium webdriver学习(四)------------定位页面元素
- 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八种,现分别介绍如下
- selenium webdriver学习(四)------------定位页面元素(转)
- 页面元素定位 id 和 xpath 使用selenium IDE 浏览器插件获取
- 【WebDriver】selenium使用CSS定位页面元素
- Selenium(四)――webdriver 之定位页面元素
- webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载
- By.Xpath快速定位页面元素常用方法
- 使用selenium webdriver进行元素定位
- 【Selenium】webdriver进行页面元素定位
- 7.在用selenium2(WebDriver)做自动化时候,如果有的元素通过ID,Xpath,CSS selector不能定位的解决方案。
- 【selenium学习笔记】webdriver进行页面元素定位
- java selenium webdriver实战 页面元素定位
- Selenium-webdriver—如何定位测试元素
- Selenium Webdriver元素定位的八种常用方式