-
Notifications
You must be signed in to change notification settings - Fork 970
授人以渔‐自定义修改你的代码
- sleep(int seconds)
单位是秒,已经做了异常捕获,在代码中可以直接使用 - initDriver()
初始化驱动程序,默认会初始化:CHROME_DRIVER,ACTIONS和WAIT,后续会讲解这三个变量 - SeleniumUtil.getWait(150)
设置程序等待某元素的时间,单位是秒,默认给的是150,即等待元素150秒,如果150秒后还未出现,程序会抛异常
- CHROME_DRIVER
浏览器的驱动程序,默认使用了Chrome,所以用了这个名字,如果有人想用其他的浏览器,例如Edge或FireFox,自行修改即可(换了浏览器对应的驱动也要改) - ACTIONS
执行的动作,本项目中一般使用操作鼠标(悬停),或者是按键盘的某些键达到某些效果 - WAIT
此常量表示的是等待时间,一般用法如下:WAIT.until(ExpectedConditions.presenceOfElementLocated(By.className("list-pagination-box"))); 以上代码的例子为等待class名为list-pagination-box的元素出现,presenceOfElementLocated方法的意思是等待这个元素在Dom树中出现 换句话说这个元素出现了就立即通过,但此元素有可能在页面上还不可见WAIT.until(ExpectedConditions.elementToBeClickable(By.className("list-pagination-box"))); 以上代码的例子为等待class名为list-pagination-box的元素是否是可以点击的 换句话说这个元素不仅出现而且可以点击的状态,才会通过
- WebElement element = CHROME_DRIVER.findElement()【寻找单个元素】
这个方法会返回一个WebElement对象,如果找到多个,它会返回多个元素的第一个元素,我将返回的对象命名为了element
如果想要点击这个元素:element.click()
如果这个元素是个输入文本框,想要在这个元素发消息:element.sendkeys("你要发送的消息")
如果想要寻找这个元素的子元素: element.findElement(表达式),需要注意的是
由于页面可能会发生变化,有可能获取的元素和你页面看到的不一致
- List elements = CHROME_DRIVER.findElements(表达式)【寻找多个元素】
其实就是将上面的findElement方法加一个 s 即可,就会返回所有匹配的元素
选择的方式有很多,这里推荐xpath与cssSelector
其他的还有例如:根据className,id,或者tag的选取方式,可以自行拓展
-
By.xpath
xpath语法:https://www.cnblogs.com/wu-wu/p/11642992.html
快速入门://表示的选取所有元素,./表示的选取当前节点的元素,比如你已经获取了某个元素,要在这个元素中查找就需要使用点杠选择
如果自己写了一个表达式,怎么快速验证?
使用Charome的xpath插件:xpathHelper 使用方式如下:
-
以上的例子中,搜索框的元素是
<button class="btn btn-search xh-highlight" ka="search_box_index">搜索</button>
所以表达式是://button[@class="btn btn-search"],即选取页面下所有的button元素,class名为btn btn-search的元素
由于当前页面只有搜索按钮的属性是这个,所以就匹配到了,匹配到的元素,会变为黄色,可以用这样的方式,判断自己的表达式有没有效
-
偷懒的方法:可以右键你要选择的元素,复制xpath、seletor等
注意:直接复制的方式可能会只定位到某一个元素,如果页面发生细微的改变,就会导致表达式失效,所以仍然建议有能力的可以自己写表达式,最大程度的保证兼容性
同样,xpath如果不满足的情况可以使用seletor选择方式,具体根据自己需要即可
目前能想到的就这么多了,如果在使用的过程中碰到问题,欢迎提issue,有问题看到必回,感谢大家的支持

