Selenium+Java 自动化操作小经验

第一次发CSDN 大佬勿喷 不对之处欢迎纠正 修改。

这个玩意是在用谷歌浏览器的基础上使用Selenium自动化去识别 H5页面上 的标签 做内容的获取 可以搭配 Poi 等第三方 API去记载页面上的内容(纯属自嗨介绍  详细可以百度)

https://baike.baidu.com/item/Selenium/18266?fr=aladdin

下面是一些相关配置
 

Maven


<dependencies>
 <!‐‐ selenium‐java ‐‐>
 <dependency>
 <groupId>org.seleniumhq.selenium</groupId>
 <artifactId>selenium‐java</artifactId>
 <version>3.4.0</version>
 </dependency>
</dependencies>

这个是谷歌浏览器支持的 脚本驱动 AutoIt3 提取码:9999


以下是我在工作中遇见的问题和解决方式


当click()点击被页面元素遮挡时则需要使用JS点击方法。(后端使用JS)

public static JavascriptExecutor jsClick
 (WebElement element , WebDriver driver) {
 JavascriptExecutor js = (JavascriptExecutor)driver;
 js.executeScript("arguments[0].click();", element);
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 // TODO 加1s休息时间
 e.printStackTrace();
}
 return null;
 }

driver获取元素by.xpath定位。

List<WebElement> table_tr_td =
 driver.findElements(By.xpath("//table[contains(@class,'matters‐table')
 and contains(@class,'matters‐table‐material') and
 contains(@class,'matters‐table‐info')]/tbody/tr/td"));

// 双斜杆表示从页面元素模糊查询标签。
// 单斜杆表示从上一级查询标签。
//contains 表示包含 包含class属性的值。
int size = driver.findElements(By.xpath("//ul[contains(@class,'select‐tab') and contains(@class,'span8tab')]/li")).size()‐1;
 for (int i = 1; i <size; i++) {
 List<WebElement> li3 = driver.findElements(By.xpath("//ul[contains(@class,'select‐tab') and contains(@class,'span8tab')]/li"));
 }

在点击事件出现新标签时,会有新的handle出现所以要给 driver赋予新的handle。


public static String getLastHandle(WebDriver driver) {
 //获取当前打开窗口的所有句柄
 Set<String> Allhandles = driver.getWindowHandles();
 ArrayList<String> lst = new ArrayList<String>(Allhandles);
 return lst.get(lst.size()‐1);
 }

在关闭一个页面的时候使用close()方法 但是关闭的是当前页面 如果后续要操作其他页面 就需要赋予其对应页面的handle


 driver.close();
 driver.switchTo().window(firstWindowHandle);

报错项与解决方法

运行chrome浏览器 报错:“main” org.openqa.selenium.WebDriverException: unknown error: call function result missing ‘value’ 这个可能是chrome 的驱动不匹配造成的 下载最新的放到原有目录下 下载地址可chrome 官网 也可使用下面的地址下载http://npm.taobao.org/mirrors/chromedriver/

NoSuchElementException

1.检查元素的定位器是否正确

2.如果定位器正确,增加休眠时间

3.等待了足够的时间依然找不到的话,更换定位器的定位方式

NoSuchWindowException

1.检查窗口切换的定位器是否正确

2.切换之前增加休眠时间

NoAlertPresentException

1.确保 alert 会出现

2.切换到 alert 之前增加休眠时间

NoSuchFrameException

1.检查 frame 切换的定位器是否正确

2.检查 frame 是否有父级的 frame(如果有,先切换到父级的 frame)

3.确保切换到另一个 frame 之前先切换到 default content

4.切换 frame 之前增加休眠时间

UnhandledAlertException

1.检查是否有 alert 存在,但是尚未处理掉

2.如果没有 alert 存在依然报这个异常的话,确保 F12 出来的那个窗口是关闭的

StaleElementReferenceException

1.重新定位该元素(可能是由于页面刷新导致元素过期了)

UnexpectedTagNameException

1.检查 Html 代码中的 tag name 是否正确

2.定位之前增加休眠时间


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值