1、环境搭建

jdk1.6版本:selenium 2.4版本。

jdk1.8版本:selenium3.14版本。

(1)selenium的jar包下载:

地址:http://selenium-release.storage.googleapis.com/index.html

需要用:selenium-server-standalone-3.9.1.jar(需要在cmd下安装,java -jar ***),selenium-java-2.40.0.jar,selenium-java-2.40.0-srcs.jar还有它的libs。

(2)webDriver下载:

网址: http://chromedriver.storage.googleapis.com/index.html

或者 http://npm.taobao.org/mirrors/chromedriver/

注意:webDriver必须与浏览器版本相对应,否则会出现问题

2、程序代码示例

        //固定时间等待:driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        //设定最大等待时间,一旦标签存在即可返回:wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".abc")))
        WebDriver driver = new ChromeDriver(); // 新建一个WebDriver 的对象,但是new 的是谷歌的驱动
        driver.get(url); // 打开指定的网站
        try 
        {
            Thread.sleep(60000);// 60秒
            driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        } 
        catch (Exception e) {
            e.printStackTrace();
        }

        //定位层级元素
        WebElement e = driver.findElement(By.cssSelector(".animation-toggle"));
        e.click();
       
        //等待加载完页面
        try 
        {
            Thread.sleep(60000);// 60秒
            driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);//等待界面加载完
        } 
        catch (Exception e2) 
        {
            e2.printStackTrace();
        }
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date d=new Date();
        List<WebElement> list = driver.findElements(By.cssSelector("img.frame"));//img标签,class为frame
        int i=-1;
        for (WebElement el : list) 
        {
            String img_url=el.getAttribute("src");
            //System.out.println(img_url);
            String time = sdf.format(d.getTime()+i*24*60*60*1000);
            loadPage(img_url,type,time);
            i=i+1;
        }
        driver.quit();// 退出浏览器

3、元素定位

     

(1)根据tagName

  driver.findElement(By.cssSelector("input")

(2)根据ID

  driver.findElement(By.cssSelector("input#username"));html标签和#id

  driver.findElement(By.cssSelector("#username"));只是#id

(3)根据className

  单一class:driver.findElement(By.cssSelector(".username"));.class

  复合class:driver.findElement(By.cssSelector(".username.**.***"));.classA.classB

(4)根据元素属性

  1)精准匹配: 

    [A]  driver.findElement(By.cssSelector("input[name=username]"));属性名=属性值,id,class,等都可写成这种形式

           [B]  driver.findElement(By.cssSelector("img[alt]"));存在属性。例如img元素存在alt属性

    [C]  driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));多属性

  2)模糊匹配:(正则表达式匹配属性)

    [A]  ^=  driver.findElement(By.cssSelector(Input[id ^='ctrl']));匹配到id头部 如ctrl_12

    [B]  $=  driver.findElement(By.cssSelector(Input[id $='ctrl']));匹配到id尾部 如a_ctrl

    [C]  *=  driver.findElement(By.cssSelector(Input[id *= 'ctrl']));匹配到id中间如1_ctrl_12

    更多正则匹配原则请查看CSS3 选择器——属性选择器  http://www.w3cplus.com/css3/attribute-selectors

(5)查询子元素

java,利用Selenium调用浏览器,动态模拟浏览器事件,动态获取页面信息
<form >
  <span >
    <input >
  </span>
  <span >
    <input >
  </span>
</form>
java,利用Selenium调用浏览器,动态模拟浏览器事件,动态获取页面信息

相关文章:

  • 2021-11-29
  • 2022-12-23
  • 2021-06-10
  • 2021-08-31
  • 2021-10-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-22
  • 2022-01-29
  • 2021-07-06
  • 2022-02-18
  • 2022-12-23
相关资源
相似解决方案