什么是Xpath及其用法

什么是Xpath及其用法,第1张

1 XPath是什么

XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

2 Xml示例 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。

在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML10规范,使用它来简化Internet的文档信息传输。

示例:

<?xml version="10" encoding ="ISO-8859-1">

<book>

<title lang="en">Harry Potter</title>

<author>J K Rowling</author>

<year>2005</year>

<price>2999</price>

</book>

//a[@href="/wt/common/wangyicom"] 这个定位到节点,

得到节点node 取InnerText

// var goodName= docDocumentNodeSelectSingleNode("//h3[@class='goods-title']");

// // MessageBoxShow(goodNameInnerText);

selenium,一个有效的自动化测试工具,我主要介绍下关于如何封装WebDriver,为一个比较轻松上手的自动化测试埋下铺垫

工具/原料

selenium-server-standalone-2390jar软件包

方法/步骤

先了解下什么是WebDriver

熟悉WebDriver的关于JAVA的一些API的使用

介绍一个火狐的插件firepath

我做的自动化测试是在火狐上运行的,因为我找到一个对于自动化测试比较有帮助的插件,那就是firepath,具体用法,就是先安装该插件,它会在firebug那么调试的窗口最右边出现。firepath截图和firepath安装后的截图如下所示。(优点:点哪个元素,哪个元素的xpath路径立马显示,看图吧)

自己封装的WebDriver的API方法

package comqiangdata;

import javautilIterator;

import javautilList;

import javautilSet;

import orgopenqaseleniumBy;

import orgopenqaseleniumNoSuchElementException;

import orgopenqaseleniumWebDriver;

import orgopenqaseleniumWebElement;

/

WebDriver帮助类

/

public class WebDriverUtil {

/

写在前面的话:

我写的这个WebDriver帮助类法仅仅针对于xpath访问的

为什么这么写呢?有两点理由

其一:xpath获取方便,我用的是firefox浏览器,只要用firepath这个插件,我们就可以正确的定位到每一个节点,并且firepath支持查询功能,值得大家使用

其二:使用统一的xpath,给编码带来了一定的规范

/

/

没有验证码的的登录

@param wd WebDriver对象

@param unameXpath 用户名的xpath路径

@param uname 用户名

@param pwdXpath 密码xpath路径

@param pwdValue 密码

@param loginBtnXpath 登录按钮xpath

/

public static void login(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath){

wdget(url);

inputs(wd,unameXpath,uname);

inputs(wd,pwdXpath, pwd);

click(wd,loginBtnXpath);

}

/

登录可能放在一个frame里了:我是因为遇到过,所以才加了个方法的

@param wd WebDriver对象

@param unameXpath 用户名的xpath路径

@param uname 用户名

@param pwdXpath 密码xpath路径

@param pwdValue 密码

@param loginBtnXpath 登录按钮xpath

@param frame 第几个框架

/

public static void loginFrame(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath,int frame){

wdget(url);

wdswitchTo()frame(frame);

inputs(wd,unameXpath,uname);

inputs(wd,pwdXpath, pwd);

click(wd,loginBtnXpath);

}

/

有验证码的登录

@param wd WebDriver对象

@param unameXpath 用户名的xpath路径

@param uname 用户名

@param pwdXpath 密码xpath路径

@param pwdValue 密码

@param loginBtnXpath 登录按钮xpath

@param seconds 输入验证码的间隔

/

public static void loginVerify(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath,int seconds){

wdget(url);

inputs(wd,unameXpath,uname);

inputs(wd,pwdXpath, pwd);

try {

Threadsleep(seconds1000); //这段时间内请输入验证码

} catch (InterruptedException e) {

eprintStackTrace();

}

click(wd,loginBtnXpath);

}

/

获取页面单个元素

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static WebElement getElement(WebDriver wd,String xpath){

return wdfindElement(Byxpath(xpath));

}

/

获取页面的一组元素

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static List<WebElement> getElements(WebDriver wd,String xpath){

return wdfindElements(Byxpath(xpath));

}

/

获取元素节点的文本值

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static String getText(WebDriver wd,String xpath){

return wdfindElement(Byxpath(xpath))getText();

}

/

获取元素节点的文本值

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return 没有找到该元素时会有个提示,并且不会报错,建议使用

/

public static String getExistText(WebDriver wd,String xpath){

if(isExist(wd, xpath)){

return getText(wd, xpath);

}

return "-1";

}

/

获取元素节点的属性值

@param wd WebDriver对象

@param xpath 目标节点的xpath

@attribute 要获取目标节点的哪个属性

@return

/

public static String getAttribute(WebDriver wd,String xpath,String attribute){

return wdfindElement(Byxpath(xpath))getAttribute(attribute);

}

/

点击节点

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static void click(WebDriver wd,String xpath){

wdfindElement(Byxpath(xpath))click();

}

/

输入文本

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static void inputs(WebDriver wd,String xpath,String value){

wdfindElement(Byxpath(xpath))sendKeys(value);

}

/

判断是否选中

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static boolean isChecked(WebDriver wd,String xpath){

return wdfindElement(Byxpath(xpath))isSelected();

}

/

判断是否可用

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static boolean isEnabled(WebDriver wd,String xpath){

return wdfindElement(Byxpath(xpath))isEnabled();

}

/

判断是否存在元素

@param wd WebDriver对象

@param xpath 目标节点的xpath

@return

/

public static boolean isExist(WebDriver wd,String xpath){

try{

wdfindElement(Byxpath(xpath));

return true;

}catch (NoSuchElementException e) {

return false;

}

}

/

选中复选框,其实和点击一样,只是重新起了个名字

@param wd WebDriver对象

@param xpath 目标节点的xpath

/

public static void check(WebDriver wd,String xpath){

click(wd, xpath);

}

/

点击那种隐藏的下拉框

@param wd WebDriver对象

@param xpath1 事件源节点的xpath

@param xpath2 目标节点的xpath

/

public static void clickHidden(WebDriver wd,String xpath1,String xpath2){

click(wd, xpath1);

click(wd, xpath2);

}

/

获取隐藏的文本,原理同上

@param wd WebDriver对象

@param xpath1 事件源节点的xpath

@param xpath2 目标节点的xpath

/

public static void getHiddenText(WebDriver wd,String xpath1,String xpath2){

click(wd, xpath1);

getText(wd, xpath2);

}

/

获取隐藏节点的属性值

@param wd WebDriver对象

@param xpath1 事件源节点的xpath

@param xpath2 目标节点的xpath

@param attribute 要获取目标节点的哪个属性

/

public static String getHiddenAttribute(WebDriver wd,String xpath1,String xpath2,String attribute){

click(wd, xpath1);

return getAttribute(wd, xpath2, attribute);

}

/

切换窗口

@param wd WebDriver对象

@param title 要切换窗口的标题

/

public static void changeWindow(WebDriver wd,String title){

String current = wdgetWindowHandle();

Set<String> all = wdgetWindowHandles();

Iterator<String> iterator = alliterator();

while (iteratorhasNext()) {

String handle = iteratornext();

if(handleequals(current)){

continue;

}

else{

wdswitchTo()window(handle);

if(wdgetTitle()contains(title)){

Systemoutprintln("窗口成功跳转");

break;

}

else{

continue;

}

}

}

}

}

5

个人小结

以上基于WebDriver简单的封装在一定程度上可以减少代码量,封装得太少,看到的你根据自己的需要进行扩充吧,我个人特点是喜欢封装一切可以复用的代码,以便达到高效率的编码,并不是说会编码就够了,多总结总结还是会让自己的编码路不会走的那么崎岖些

$xmlDoc = new DOMDocument;

$xmlDoc -> load($xml_resource);

$xpath = new DOMXPath($xmlDoc);

//$advert_path = '/root/advert[@id="1"]';

$statue_path = '/root/advert/status';

//$advert = $xpath -> query($advert_path) ->item(0);

$replaceNodeOld = $xpath -> query($statue_path) ->item(0);

$replaceNodeNew = = $xmlDoc -> createElement('person', 'fff');//改变成它

$replaceNodeOld = $replaceNodeOld -> item(0)->parentNode->replaceChild($replaceNodeNew, $replaceNodeOld ->item(0));

以上就是关于什么是Xpath及其用法全部的内容,包括:什么是Xpath及其用法、xpath定位一段文字、python怎么定位富文框textarea的元素我用xpath定位包找不到元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9484093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存