这里只是为了自己方便写的小程序,代码写的一般,分享出来,有许多的不足,如遇到问题,或有其他想法、意见、建议,可在此贴讨论。
插件依赖于 Firefox 中的 Firebug 和 Firepath,Firefox 版本应在 47 以下。
Firefox47 以上版本强制验证插件签名,更高版本不支持 Firebug。只能选择 47 以下版本
插件源码下载 - 百度网盘
提取码:e3ia
注意事项:
将 FireBug 和 Firepath 插件拷贝到C:\Users\{用户名}\AppData\Roaming\Mozilla\Firefox\Profiles\{ID}.default\extensions
目录下。其中用户名和 ID 需要自行替换。重启 Firefox 后,允许 Firepath 运行即可。
安装后应出现如下选项,如果没出现则请重新安装。
Java(1.8)、Tomcat 环境(Tomcat8.5)
将 web 目录下的 page-module-service.war 拷贝到 ${tomcat}/webapps
目录下,须修改${tomcat}/conf/server.xml
的配置文件,找到 Connector 元素,替换即可。
这里主要编码方法和端口设置URIEncoding="UTF-8"
和port="8081"
,自己单独修改这两项也可。
启动 Tomcat 后,访问http://localhost:8081/page-module-service/
出现 HelloWorld 即可,如下
以百度首页为例
使用 Firebug 的
选择新闻元素,点击添加(快捷键 alt+a),弹出添加元素窗口,填写描述和变量名,点击添加即可。
说明:描述会生成 Java 的变量注释,变量名会变为类的属性,变量名需要符合 Java 变量定义规范,且必须唯一
对应生成的源码为
/**
* 新闻
**/
@FindBy(xpath=".//*[@id='u1']/a[2]")
public WebElement news_link;
插件自动填写描述和变量名,描述会根据元素的 text、placeholder、alt 或 value 填写,变量名会根据 name 或 id 填写,没有则为空。
插件自动根据 xpath 匹配的元素个数选择元素类型,xpath 匹配多个节点时,插件选择List<WebElement>
类型,如.//*[@id='u1']/a
这时生成的 Java 代码如下:
/**
* 链接
**/
@FindBy(xpath=".//*[@id='u1']/a")
public List<WebElement> links;
点击查看(alt+s),显示所有定位元素,可以点击 delete 删除改元素
查看同时会检查 xpath 是否有效,如果该 xpath 在 dom 中不存在或语法有错误,则提示无效。如下
所有元素定位成功后,可以发送到服务端,生成源码
,点击查看,点击发送,写入完整类名:包 + 类名,如下
在服务端首页下载源码,第一个为下载单个类,输入完整类名:包 + 类名,点击 download
生成如下 源码:
package com.example.page;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;;
public class Baidu{
/**
* 新闻
**/
@FindBy(xpath=".//*[@id='u1']/a[2]")
public WebElement news_link;
/**
* 链接
**/
@FindBy(xpath=".//*[@id='u1']/a")
public List<WebElement> links;
}
第二是下载整个包,输入包名:com.example.page,会下载该包下所有 java 源码,如下
点击载入(alt+l),输入完整类名载入:com.example.page.Baidu
服务端所有数据保存在${tomcat}\webapps\data
目录下,存放源码和 json 数据(载入时会查找 json 数据,不要删除),会以包名的形式生成目录。tmp 为压缩包目录。
如果提交的类名一致,则生成的定位信息会被覆盖,被覆盖,被覆盖!!
建议将自动生成的类放在单独的包中,通过继承使用,不要手动修改定位类,通过插件加载修改定位。
可修改插件请求地址,在 ${FireXPath}/locale/en-US/DefaultConfig.properties,修改 request_url 即可,可使用 ant 重新打包即可。
#默认请求地址
request_url=http://localhost:8081/page-module-service/page
#是否添加元素时提示
hint=true
#是否发送数据成功后清空已添加元素信息
send.clear=true