Java C# PHP Python Perl Ruby
Windows/Mac/Linux
Selenium-WebDriver 直接通过浏览器自动化的本地接口来调用浏览器。
如何直接调用,和调用的细节取决于你使用什么浏览器。本章后续的内容介绍了每个 “browser driver” 的详细信息。
你可能需要,也可能不需要 Selenium Server,取决于你打算如何使用 Selenium-WebDriver。
如果你仅仅需要使用 WebDriver API,那就不需要 Selenium-Server。
如果你所有的测试和浏览器都在一台机器上,那么你仅需要 WebDriver API。WebDriver 将直接操作浏览器。
在有些情况下,你需要使用 Selenium-Server 来配合 Selenium-WebDriver 工作,例如:
1)你使用 Selenium-Grid 来分发你的测试给多个机器或者虚拟机。
2)你希望连接一台远程的机器来测试一个特定的浏览器。
3)你没有使用 Java 绑定(例如 Python, C#, 或 Ruby),并且可能希望使用 HtmlUnit Driver。
1)RemoteWebDriver
2)浏览器对应driver
1)设置driver的环境变量,加载WebDriver实例
2)获取一个页面
driver.get(“http://www.google.com”);
3)查找 UI 元素(web 元素)
Byid
WebElement element = driver.findElement(By.id("coolestWidgetEvah"));
ByClassName
List<WebElement> cheeses = driver.findElements(By.className("cheese"));
ByTagName
WebElement frame = driver.findElement(By.tagName("iframe"));
ByName
WebElement cheese = driver.findElement(By.name("cheese"));
ByLinkText
WebElement cheese = driver.findElement(By.linkText("cheese"));
ByPartialLinkText
WebElement cheese = driver.findElement(By.partialLinkText("cheese"));
ByCSS
WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy"));
ByXPATH
WebElement cheese = driver.findElement(By.xpath(xpath));
4)元素等待
inputBox = fluentWait(By.xpath(xpath));
5)选择(select)/取消选择
Select类
select_by_index(index)/deselect_by_index(index)
select_by_value(value)/deselect_by_value(value)
select_by_visible_text(text)/deselect_by_visible_text(text)
6)用户输入
SendKeys可以给element做输出,也可以作为动作快捷键,比如ctrl+c,ctrl +v ,alt,enter等
inputBox.sendKeys(text);
7)用户输入 - 填充表单
如果你已经完成表单填充,你可能希望提交它,你只要找到 “submit” 按钮然后点击它即可。
driver.findElement(By.id("submit")).click();
或者,你可以调用 WebDriver 为每个元素提供的 “submit” 方法。如果你对一个 form 元素调用该方法,WebDriver 将调用这个 form 的 submit 方法。如果这个元素不是一个 form,将抛出一个异常。
element.submit();
8)在窗口和帧(frames)之间切换
driver.switchTo().window("windowName");
driver.switchTo().frame("frameName");
9)Cookies
在我们继续介绍更多内容之前,还有必要介绍一下如何操作 cookie。首先,你必须在 cookie 所在的域。如果你希望在加载一个大页面之前重设 cookie,你可以先访问站点中一个较小的页面,典型的是 404 页面
// 进到正确的域
driver.get("http://www.example.com");
// 设置 cookie,这个cookie 对整个域都有效
Cookie cookie = new Cookie("key", "value");
driver.manage().addCookie(cookie);
// 输出当前 url 所有可用的 cookie
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
}
// 你可以通过3中方式删除 cookie
// By name
driver.manage().deleteCookieNamed("CookieName");
// By Cookie
driver.manage().deleteCookie(loadedCookie);
// Or all of them
driver.manage().deleteAllCookies();
10)拖拽
以下代码演示了如何使用 “Actions” 类来实现拖拽。浏览器本地方法必须要启用:
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
https://www.selenium.dev/selenium/docs/api/java/overview-summary.html
https://wizardforcel.gitbooks.io/selenium-doc/content/index.html