1.概述
在本教程中,我们将探讨如何将Selenium与Java结合使用。 我们将使用Selenium打开Google,进行搜索,然后单击URL。
该代码在Github上可用。
2.什么是硒?
Selenium使Web浏览器自动化。 就是这样
Selenium使我们能够模拟用户与网页的交互。 我们可以使用两种Selenium产品:Selenium WebDriver和Selenium IDE。 我们将使用WebDriver。
什么是WebDriver? WebDriver是官方的W3C规范,从本质上讲,它是与Web浏览器进行交互的一种方式。 以前,使用Selenium RC,Selenium可以通过注入JavaScript与元素进行交互来与浏览器一起运行。 随着WebDriver规范的采用,诸如Google,Mozilla和Microsoft之类的公司发布了具有受Selenium可以利用的钩子控制的功能的浏览器。 这个钩子使Selenium可以像人类一样与Web浏览器进行交互。
我们将使用Google Chrome,因此需要下载chromedriver 。
下载驱动程序后,我们需要执行文件。
在Mac上,我们可以简单地执行以下操作:
./chromedriver
3. pom.xml
我使用Spring Tool Suite并创建了一个新的Spring Starter项目,这不是必需的,但我倾向于喜欢Spring。 所以Selenium实际上是由Spring Boot Starter Parent管理的。 版本是2.53.1。
<!-- typical pom beginning--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
<!-- typical pom ending-->
4.打开Chrome和搜索
对于此步骤,我们将建立与chromedriver的连接,打开浏览器,并搜索“ Selenium”。
我们将localhost作为目标端口,因为chromedriver在本地服务器的端口9515上运行。
RemoteWebDriver实现了WebDriver ,WebDriver的目标是提供一个面向对象的API,该API为现代高级Web应用程序测试问题提供支持。 因此,基于这些事实,我们可以说RemoteWebDriver是允许使用远程浏览器的实现。 好处包括将测试的运行位置与浏览器所在的位置分开,以及使用当前操作系统上不可用的浏览器进行测试的能力。 缺点包括以下事实:我们需要一个外部servlet容器来运行,并且如果引发异常,则可能会有延迟。
// create a Chrome Web DriverURL local = new URL("http://localhost:9515");WebDriver driver = new RemoteWebDriver(local, DesiredCapabilities.chrome());// open the browser and go to open google.comdriver.get("https://www.google.com"); driver.findElement(By.id("lst-ib")).sendKeys("Selenium");driver.findElement(By.name("btnK")).click();driver.manage().window().maximize();
5.获取页面并单击
WebDriver为我们提供了findElement和findElements方法来在网页上定位元素。 这些方法接受By对象作为参数。 By具有借助定位符值在文档中定位元素的方法。 Selenium已经很好地记录了他们的API 。
一旦我们了解了如何使用Selenium来标识元素,就可以轻松阅读任何driver.findElements(By…)方法。 但是我们也需要知道如何编写它们。 使用Chrome之类的浏览器,我们可以右键单击(或等效按钮)以检查元素以获取其HTML / CSS信息。 另外,我们也可以“查看源代码”以获取更多完整信息。
为了演示如何在网页上滚动,我们执行jse.executeScript(“ window.scrollBy(0,250)”,“”) 。
顾名思义, JavaScriptExecutor执行JavaScript。 JavaScriptExecutor是通过Selenium WebDriver提供的接口。 它提供了两种方法“ executescript”和“ executeAsyncScript”以在所选窗口或当前页面上运行javascript。
使用下面的代码,可以创建一个更全面的漫游器来搜索Google并单击几个页面的URL。
// get the number of pagesint size = driver.findElements(By.cssSelector("[valign='top'] > td")).size();for(int j = 1 ; j < size ; j++) {if (j > 1) {// we don't need to navigate to the first pagedriver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j}String pagesearch = driver.getCurrentUrl();List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));System.out.println(findElements.size());for(int i=0;i<findElements.size();i++){findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a")); findElements.get(i).click(); driver.navigate().to(pagesearch);JavascriptExecutor jse = (JavascriptExecutor) driver;//Scroll vertically downward by 250 pixelsjse.executeScript("window.scrollBy(0,250)", "");}}
六,结论
这是Java Selenium的基本介绍。 正如我们发现的那样,在Selenium Webdriver中,定位器(如XPath,CSS等)用于标识和执行Web页面上的操作。 也可以执行任意JavaScript。
完整的代码可以在Github上找到。
翻译自: https://www.javacodegeeks.com/2018/02/selenium-java-google-search.html