问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python怎么定位富文框textarea的元素?我用xpath定位包找不到元素_百度...

发布网友 发布时间:2022-05-01 11:34

我来回答

2个回答

懂视网 时间:2022-04-20 20:24

1.相对定位与绝对定位

//表示相对定位,对于经常发生变化的页面或者节点要用相对定位进行查找

Xpath定位的总结

/表示绝对定位,一成不变的时候可以用绝对定位进行查找

2.节点

顶级节点:bookstore

Xpath定位的总结当前节点:“.”

如果当前节点有多个则匹配多个

Xpath定位的总结

如果当前节点只有1个,则匹配1个

Xpath定位的总结

选取当前节点的父节点:”..”

对于html/body下的p来说它的父节点就是body,这是用绝对路径,表示必须从html下找到body再找到p,然后匹配p的父节点。

Xpath定位的总结

如果用相对路径来找父节点,可以看到从p开始就不考虑它的绝对位置,也就是说从body开始 符合父节点条件的所有元素都会被找出来。

查找当前节点下的所有元素://book[1]/..

这个是节点索引+父节点的方式

Xpath定位的总结

3.通过标签定位元素

//book:找到所有名为book的标签

Xpath定位的总结

再来一个百度的

Xpath定位的总结

4.属性定位

1.定位属性为category 的元素

//book[@category='cooking'] ‘[]’表示查找属性

Xpath定位的总结

2.使用text文本属性精确定位,text也可以用.代替

查找//book//price下文本为30.00的元素

Xpath定位的总结

查找year标签中text文本中大于2004的元素

Xpath定位的总结

3.使用contains模糊定位,contains意为包含

模糊定位查找文本信息包含Potter的元素://title[contains(text(),"Potter")]

Xpath定位的总结

扩充练习

Xpath定位的总结

Xpath定位的总结

4.”*”表示任何属性所有属性

查找所有带有属性值的://@*

Xpath定位的总结

查找title标签里所有有属性的元素:

Xpath定位的总结

用Not取反,表示查找title标签里没有属性的元素,这里没有所以没查找出来

@*表示所有属性

not(@*)表示没有属性

5.查找带有category属性的元素

//@category

Xpath定位的总结

5.逻辑运算符

1.通过and运算符定位元素

//book[@category="web" and @cover="paperback"]

Xpath定位的总结

2.通过or运算符定位元素
//book[@category="children" or @cover="paperback"]

Xpath定位的总结

3.通过取反not运算符定位元素

//book[not(position()>2)] 取book标签中position大于2的

Xpath定位的总结

//book[not(position()>2)] not取反

Xpath定位的总结

//year[not(.=2005)] 表示取非2005文本节点的year节点

Xpath定位的总结

通过“>=”“<=”运算符定位元素
//price>=30 查找元素中是否存在price大于等于30的 存在返回Boolean true 不存在返回Boolean: false

Xpath定位的总结

Xpath定位的总结

4.通过“!”运算符定位元素

//book[@category!='web' ]

Xpath定位的总结

6.通过节点索引定位元素

1.查找第一个元素的

//book[1]:找到第一个标签为book的

Xpath定位的总结

2.通过position定位第3个元素

//bookstore/book[position()=3]

Xpath定位的总结

3.通过position取多个元素

//bookstore/book[position()>=2]

Xpath定位的总结

4.通过last()函数找到最后一个元素

//book[last()]

5.通过last()函数找到倒数第二个元素
//book[last()-1]

Xpath定位的总结

7.轴定位


查找book[1]/title的父元素://book[1]/title/parent::*

Xpath定位的总结

查找book[1]的子元素://book[1]/child::*

Xpath定位的总结

//book/child::price 查找book标签下的所有子元素中标签为price的

following-sibling的应用
//bookstore/book[1]/child::title/following-sibling::*

following-sibling表示当前节点的后序所有兄弟节点元素

就是说查找title后面所有兄弟节点

Xpath定位的总结


/bookstore/book[1]/child::title/following-sibling::author

following-sibling::author 指定查找title后面所有兄弟节点中名为author 的元素

Xpath定位的总结

preceding-sibling::* 表示当前节点的前面所有兄弟节点元素

//bookstore/book[1]/child::price/preceding-sibling::* 意为查找price节点前面所有的兄弟元素

Xpath定位的总结

查找祖先节点包括自身://book[1]/ancestor-or-self::*

Xpath定位的总结

查找子孙节点包括自身://book[1]/descendant-or-self::*

Xpath定位的总结


查找当前节点的所有元素://book[1]/preceding::* 查找当前节点下的所有元素

Xpath定位的总结

//book[2]//preceding::* 会把book[2]以及book[2]节点之前的所有元素都找出来

Xpath定位的总结

轴总结:

parent::* 表示当前节点的父节点元素
ancestor::* 表示当前节点的祖先节点元素
child::* 表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素
self::* 表示当前节点的自身元素
ancestor-or-self::* 表示当前节点的及它的祖先节点元素
descendant-or-self::* 表示当前节点的及它们的后代元素
following-sibling::* 表示当前节点的后序所有兄弟节点元素
preceding-sibling::* 表示当前节点的前面所有兄弟节点元素
following::* 表示当前节点的后序所有元素
preceding::* 表示当前节点的所有元素

热心网友 时间:2022-04-20 17:32

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

selenium-server-standalone-2.39.0.jar软件包
方法/步骤

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

自己封装的WebDriver的API方法
package com.qiang.data;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

/**
* 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){
wd.get(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){
wd.get(url);
wd.switchTo().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){
wd.get(url);
inputs(wd,unameXpath,uname);
inputs(wd,pwdXpath, pwd);
try {
Thread.sleep(seconds*1000); //这段时间内请输入验证码
} catch (InterruptedException e) {
e.printStackTrace();
}
click(wd,loginBtnXpath);
}

/**
* 获取页面单个元素
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static WebElement getElement(WebDriver wd,String xpath){
return wd.findElement(By.xpath(xpath));
}
/**
* 获取页面的一组元素
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static List<WebElement> getElements(WebDriver wd,String xpath){
return wd.findElements(By.xpath(xpath));
}

/**
* 获取元素节点的文本值
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static String getText(WebDriver wd,String xpath){
return wd.findElement(By.xpath(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 wd.findElement(By.xpath(xpath)).getAttribute(attribute);
}
/**
* 点击节点
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static void click(WebDriver wd,String xpath){
wd.findElement(By.xpath(xpath)).click();
}
/**
* 输入文本
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static void inputs(WebDriver wd,String xpath,String value){
wd.findElement(By.xpath(xpath)).sendKeys(value);
}
/**
* 判断是否选中
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static boolean isChecked(WebDriver wd,String xpath){
return wd.findElement(By.xpath(xpath)).isSelected();
}
/**
* 判断是否可用
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static boolean isEnabled(WebDriver wd,String xpath){
return wd.findElement(By.xpath(xpath)).isEnabled();
}

/**
* 判断是否存在元素
* @param wd WebDriver对象
* @param xpath 目标节点的xpath
* @return
*/
public static boolean isExist(WebDriver wd,String xpath){
try{
wd.findElement(By.xpath(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 = wd.getWindowHandle();
Set<String> all = wd.getWindowHandles();
Iterator<String> iterator = all.iterator();
while (iterator.hasNext()) {
String handle = iterator.next();
if(handle.equals(current)){
continue;
}
else{
wd.switchTo().window(handle);
if(wd.getTitle().contains(title)){
System.out.println("窗口成功跳转");
break;
}
else{
continue;
}
}
}
}
}

5
个人小结
以上基于WebDriver简单的封装在一定程度上可以减少代码量,封装得太少,看到的你根据自己的需要进行扩充吧,我个人特点是喜欢封装一切可以复用的代码,以便达到高效率的编码,并不是说会编码就够了,多总结总结还是会让自己的编码路不会走的那么崎岖些
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
cad里面打完字怎么还原十字架 财务建帐需要什么 建账建账的基本要求 当爱情与亲情需要丢弃一样时,你会选择丢弃哪一方 当爱情和亲情有冲突时你会怎样决择?你会为你所爱的人不顾一切吗? 剑网三 查看余额 因为某些特殊原因不好登陆游戏查看,求其他方式_百度知 ... 右肺上叶中叶结节灶怎么回事 节能门窗有哪些标准 节能门窗有哪些 节能门窗具有哪些特征 复兴之路观后感500字 Python+Selenium:IE11,sendkeys执行时不能输入设置的内容 复兴之路观后感 六年级 500 拼多多上的白条套现可靠吗 selenium Python自动化测试SendKeys发送内容和回车,会清空输入框,怎么改? 拼多多信用卡套现是骗子吗 用python selenium 的sendkeys 不能定位上传按钮,求指教 跪求大型历史纪录片《复兴之路》500字观后感,必采纳,谢谢! python用import win32api如何模拟组合键alt+f4??? 如何使用python进行拨号上网及断开连接? python3.6怎么安装Sendkeys 拼多多买的什么东西可以无损套现 拼多多平台说商家套卷,还能卖东西吗? 我想把这首歌设成铃声《wewillrockyou》求如何设置成手机铃声跪求方法 求魔兽世界希尔瓦娜斯这段话的语音,要做铃声 推荐几首做手机铃声比较好的英文歌曲 求一首英文歌曲,女生唱的,节奏欢快,歌词里面有这么几句:we are we are we are the light,oh oh oh。 we are the champion手机铃声 英文歌男的唱的,一开始唱,唱到高潮,开始we are the**,we are the** 火王之千里同风林烨手机来电铃声是什么? 用python操作Windows的计算器。 python pywinauto sendkeys输入小写字母但是变成了大写 python mac 浏览器传文件 交通银行信用卡额度怎么查 交通银行信用卡额度怎么查? 交通信用卡 通过后 怎么查询额度 交通银行信用卡下卡后怎么查额度 word2007 组织架构图怎么做 南阳邓州市征信打印处 南阳人去哪里查征信 南阳卧龙区有没有地方打征信报告啊!急急急! 有哪些手机品牌是S开头的? s开头的有什么手机 手机牌子s开头的有哪些? s开头的全部手机牌子 字母s开头的手机牌子 索爱的S开头是指哪种机型 我有一个手机别人给的,不知道什么牌子,什么型号的,是个绿色的球,以S开头的,不是索爱的? 以S开头C结尾T型号的手机是什么牌子? 手机型号sm开头是什么机