admin管理员组

文章数量:1564185

先附上官网链接selenium和文档链接

官网的介绍和例子比较简单易上手,可以参考官方文档进行学习。

介绍

Selenium 是一系列工具和库的综合项目,这些工具和库支持 web 浏览器的自动化。

Selenium 控制网页浏览器。

Selenium 有很多功能, 但其核心是 web 浏览器自动化的一个工具集, 它使用最好的技术来远程控制浏览器实例, 并模拟用户与浏览器的交互。

它允许用户模拟终端用户执行的常见活动;将文本输入到字段中,选择下拉值和复选框,并单击文档中的链接。 它还提供许多其他控件,比如鼠标移动、任意 JavaScript 执行等等。

虽然 Selenium 主要用于网站的前端测试,但其核心是浏览器用户代理库。 这些接口在应用程序中无处不在,它们鼓励与其他库进行组合,以满足您的目的。

1、创建maven项目,在pom.xml中添加依赖

 <dependency>
 		//selenium的依赖
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        </dependency>
		//chrome-driver依赖,使用那个浏览器添加那个浏览器即可
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
        </dependency>
        //firefox-driver依赖,使用那个浏览器添加那个浏览器即可
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
        </dependency>

2、下载驱动,配置path

首先在浏览器设置中查看浏览器的版本,下载对应的驱动,淘宝的chrome镜像。
解压后得到chromedriver.exe

将chromedriver.exe所在的当前路径添加到path中或者将chromedriver.exe放到已有的path路径下 或者在程序中手动设置。

3、第一个脚本

 @Test
    public  void  chromeDriverTest() throws InterruptedException {
//如果将chromedriver.exe所在的当前路径添加到了path则不需要在此设置,如果无效可以重启idea再次尝试。
//        System.setProperty("webdriver.chrome.drive","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
        //开启会话,即打开浏览器
        ChromeDriver chromeDriver = new ChromeDriver();
        chromeDriver.get("https://taobao");
        //程序暂停5秒
        Thread.sleep(5000);
        //结束会话,关闭浏览器
        chromeDriver.quit();
    }

浏览器被打开,且在淘宝首页。

4、进行一些测试。

如何定位一些元素?贴一张官方文档的图。

在jquery中使用$(“id”)这种形式,在selenium中也是类似。通过静态类By即可调用相关方法。获取所需要的元素。

如何在浏览器中定位到想要定位的元素。F12打开浏览器控制台,点击控制台左上角的带有鼠标的小按钮,再点击需要定位的元素即可,控制台自动跳转到Elements页,并选中元素。右键copy,可以选择的方式很多,可以尝试一下。可以看到淘宝首页的输入框id为q,则可以使用By.id()定位。

知道如何定位元素后,使用WebElement element = driver.findElement(By.id("q"))获取并保存当前元素。再element.sendKeys("平板电脑")输入值,再次定位搜索按钮,点击即可自动进行一次搜索。贴张图,成功完成搜索。
注:淘宝需要登录才能搜索。可以将网址设为https://baidu,就不用登陆了。

5、官网的一些其他例子

获取所有li中的值。

List<WebElement> elements = driver.findElements(By.tagName("li"));

for (WebElement element : elements) {
    System.out.println("Paragraph text:" + element.getText());
}
  
等待

WebDriver通常可以说有一个阻塞API。因为它是一个指示浏览器做什么的进程外库,而且web平台本质上是异步的,所以WebDriver不跟踪DOM的实时活动状态。这伴随着一些我们将在这里讨论的挑战。

根据经验,大多数由于使用Selenium和WebDriver而产生的间歇性问题都与浏览器和用户指令之间的 竞争条件 有关。例如,用户指示浏览器导航到一个页面,然后在试图查找元素时得到一个 no such element 的错误。一个例子。

 @Test
    public  void  firstWebDriverTest(){
        WebDriver driver = new ChromeDriver();
        driver.get("https://baidu");
        driver.findElement(By.id("kw")).sendKeys("cheese" + Keys.ENTER);
// Initialize and wait till element(link) became clickable - timeout in 10 seconds
        WebElement firstResult = new WebDriverWait(driver, 10)
                .until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"2\"]/div/div/h3/a")));
// Print the first result
        System.out.println(firstResult.getText());

    }

10为最大等待时间,在搜索可cheese后若网络不好,或其他原因,页面中没有相应的结果,会导致找不到所定位的元素,出现no such element 的错误。.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"2\"]/div/div/h3/a"))); 会在等待的十秒中测试有没有所定位的元素,找到则继续运行程序,没有则等待一会儿。

本文标签: 首次浏览器操作简单selenium