使用Java的Selenium:Google搜索

1.概述

在本教程中,我们将探讨如何将Selenium与Java结合使用。 我们将使用Selenium打开Goog​​le,进行搜索,然后单击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 Driver
            URL local = new URL("http://localhost:9515");
            WebDriver driver = new RemoteWebDriver(local, DesiredCapabilities.chrome());
            // open the browser and go to open google.com
            driver.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为我们提供了findElementfindElements方法来在网页上定位元素。 这些方法接受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 pages
            int 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 page
                    driver.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 pixels
                    jse.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值