# selenium知识总结 **Repository Path**: liushuikv/selenium-knowledge-summary ## Basic Information - **Project Name**: selenium知识总结 - **Description**: webdriver常用API封装操作,包括:点击、悬停、输入、JS等 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-07-05 - **Last Updated**: 2023-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # selenium知识总结 #### 介绍 webdriver常用API封装操作,包括:点击、悬停、输入、JS等 #### 访问地址 ``` public static void getURL(WebDriver driver, String url) { try { driver.get(url); } catch (Exception e) { e.printStackTrace(); } } ``` #### 关闭浏览器 ``` public static void closeBrowser(WebDriver driver) { try { driver.quit(); } catch (Exception e) { e.printStackTrace(); System.out.println("log:error:关闭浏览器失败!"); } } ``` #### 元素点击 ``` public static void elementClick(WebDriver driver, By by, int timeOut){ try { elementUtil.waitForElement(driver, by, timeOut).click(); } catch (Exception e) { e.printStackTrace(); } } ``` #### Xpath点击 ``` public static void xpathClick(WebDriver driver, String xpath, int timeOut) { try { elementUtil.waitForElement(driver, By.xpath(xpath), timeOut).click(); } catch (Exception e) { e.printStackTrace(); } } ``` #### CSS点击 ``` public static void cssSelectorClick(WebDriver driver, String cssSelector, int timeOut) { try { elementUtil.waitForElement(driver, By.cssSelector(cssSelector), timeOut).click(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 文本点击 ``` public static void findTextClick(WebDriver driver, String text, int timeOut) { try { elementUtil.findText(driver, text, timeOut).click(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 输入数据 ``` public static void inputText(WebDriver driver, By by, int timeOut, String text) { try { elementUtil.waitForElement(driver, by, timeOut).sendKeys(text); } catch (Exception e) { e.printStackTrace(); } } ``` #### 按钮提交 ``` public static void submit(WebDriver driver, String xpath, int timeOut) { try { elementUtil.waitForElement(driver, By.xpath(xpath), timeOut).submit(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 集合索引点击 ``` public static WebElement FindByElementsClick(WebDriver driver, By by, int index, int timeOut) { WebElement ele = null; if (elementUtil.elementsExists(driver, by)) { ele = driver.findElements(by).get(index); ele.click(); } return ele; } ``` #### Xpath获取文本 ``` public static String getXpathText(WebDriver driver, String xpath, int timeOut) { try { return elementUtil.waitForElement(driver, By.xpath(xpath), timeOut).getText(); } catch (Exception e) { e.printStackTrace(); } return "null"; } ``` #### 获取文本信息 ``` public static String getText(WebDriver driver, By by, int timeOut) { try { return elementUtil.waitForElement(driver, by, timeOut).getText(); } catch (Exception e) { e.printStackTrace(); } return "null"; } ``` #### 关闭旧窗口 ``` public static void closeOldWin(WebDriver driver) { List handles = new ArrayList(); Set s = driver.getWindowHandles(); // 循环获取集合里面的句柄,保存到List数组handles里面 for (Iterator it = s.iterator(); it.hasNext();) { handles.add(it.next().toString()); } // 关闭旧页面 driver.close(); try { // 选定新页面 driver.switchTo().window(handles.get(1)); } catch (Exception e) { // Firefox浏览器逻辑结构不一样 driver.switchTo().window(handles.get(0)); } } ``` #### 关闭新窗口 ``` public static void closeNewWin(WebDriver driver) { List handles = new ArrayList(); Set s = driver.getWindowHandles(); // 循环获取集合里面的句柄,保存到List数组handles里面 for (Iterator it = s.iterator(); it.hasNext();) { handles.add(it.next().toString()); } // 切换到新窗口 driver.switchTo().window(handles.get(1)); // 关闭新窗口 driver.close(); // 切回旧窗口 driver.switchTo().window(handles.get(0)); } ``` #### 窗口切换 ``` public static void switchWindow(WebDriver driver, String windowTitle) { String s = null; Set handles = driver.getWindowHandles(); for (String t : handles) { // 遍历每一个句柄,判断窗口的标题是否包含预期字符 if (driver.switchTo().window(t).getTitle().contains(windowTitle)) { s = t; } } try { driver.switchTo().window(s); } catch (Exception e) { e.printStackTrace(); } } ``` #### 多窗口切换 ``` public void switchToWindow(WebDriver driver, int i) { String[] handls = new String[driver.getWindowHandles().size()]; driver.getWindowHandles().toArray(handls); driver.switchTo().window(handls[i]); } ``` #### 鼠标悬停 ``` public static void mouseHover(WebDriver driver, String xpath, int timeOut) { try { new Actions(driver).moveToElement(elementUtil.waitForElement(driver, By.xpath(xpath), timeOut)).perform(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 进入iframe子页面 ``` public static void intoIframe(WebDriver driver, By by, int timeOut) { try { driver.switchTo().frame(elementUtil.waitForElement(driver, by, timeOut)); } catch (Exception e) { System.out.println("进入iframe失败!"); e.printStackTrace(); } } ``` #### 退出iframe子页面 ``` public static void outIframe(WebDriver driver) { try { driver.switchTo().defaultContent(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 窗口最大化 ``` public static void windowMaximization(WebDriver driver) { try { driver.manage().window().maximize(); } catch (Exception e) { System.out.println("log:error:窗口最大化失败"); } } ``` #### select选择文本 ``` public static void select(WebDriver driver, By by, int timeOut, String text) { try { Select userSelect = new Select(elementUtil.waitForElement(driver, by, timeOut)); userSelect.selectByVisibleText(text); } catch (Exception e) { e.printStackTrace(); } } ``` #### select-xpath选择文本 ``` public static void selectXpath(WebDriver driver, String xpath, int timeOut, String text) { try { Select userSelect = new Select(elementUtil.waitForElement(driver, By.xpath(xpath), timeOut)); userSelect.selectByVisibleText(text); } catch (Exception e) { e.printStackTrace(); } } ``` #### 是否出现警告框 ``` public static boolean isAlertPresent(WebDriver driver) { try { alert = driver.switchTo().alert(); return true; } catch (NoSuchElementException e) { return false; } } ``` #### 接收警告 ``` public static void acceptAlert(WebDriver driver) { if (isAlertPresent(driver)) { alert.accept(); } } ``` #### 解除警告 ``` public static void dismissAlert(WebDriver driver) { if (isAlertPresent(driver)) { alert.dismiss(); } } ``` #### 获取弹窗文本 ``` public String getAlertText(WebDriver driver) { String text = null; if (isAlertPresent(driver)) { text = alert.getText(); } else { System.out.println("log:error 获取弹窗文本失败"); } return text; } ``` #### 运行JS脚本 ``` public static void runJs(WebDriver driver, String text) { JavascriptExecutor js = (JavascriptExecutor) driver; try { js.executeScript(text); } catch (Exception e) { e.printStackTrace(); } } ``` #### 获取JS运行结果 ``` public static String getJs(WebDriver driver, String text) { String result = ""; JavascriptExecutor js = (JavascriptExecutor) driver; try { result = js.executeScript(text).toString(); } catch (Exception e) { e.printStackTrace(); } return result; } ``` #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)