美文网首页
Selenium Testing 2 - java

Selenium Testing 2 - java

作者: 小眼睛的露鹿酱 | 来源:发表于2019-03-21 15:25 被阅读0次

    识别并加载元素

    driver.findElements() & driver.findElement()
    返回list与元素

    List<WebElement> elements = driver.findElements(By.name("name"));
        System.out.println("Number of elements:" +elements.size());
    

    输入值 sendKeys()

    按钮 click() 或者 submit()

    都可以用来点击, 但是submit的区别是: webdriver会去检测元素所属的form; click()会去加载整个页面

    点击区分

    Check Box, Radio Button click() used to toggle the element on/off

    链接,使用click()

    使用精确匹配时; 如果通过By.TestLink(); 如果出现两个不同的element有相同的TestLnik; 那只匹配到第一个。
    By.linkText() –精确匹配对应的词
    By.partialLinkText() –模糊匹配包含就可以
    当使用模糊匹配时, 对点击匹配到的第一个;他们大小写敏感。

    鼠标点击操作

    鼠标操作
    step1:导入jar包: Action Actions
    step2: 创建一个Actions实例;Actions builder = new Actions(Driver);
    step3: 创建一个Action实例, 基于上一步创建的Actions;
    Action mouseOverHome = builder.moveToElement(link).build();
    step4: mouseOverHome.perform();

    1. clickAndHold()   点击但是不松
    2. contextClick()    右击
    3. doubleClick()
    4. dragAndDrop(source, target)  拖
    5. dragAndDropBy(source, x-offset, y-offset)  拖动
    6. keyDown(modifier_key)
    7. KeyUp()
    使用Action 类
    Action act = new Action(driver);
    Action mouse = act.move
    
    public static void main(String[] args) {
    String baseUrl = "http://www.facebook.com/"; 
    WebDriver driver = new FirefoxDriver();
    
    driver.get(baseUrl);
    WebElement txtUsername = driver.findElement(By.id("email"));
    
    Actions builder = new Actions(driver);
    Action seriesOfActions = builder
        .moveToElement(txtUsername)
        .click()
        .keyDown(txtUsername, Keys.SHIFT)
        .sendKeys(txtUsername, "hello")
        .keyUp(txtUsername, Keys.SHIFT)
        .doubleClick(txtUsername)
        .contextClick()
        .build();
        
    seriesOfActions.perform() ;
    
    }
    

    下载以及上传

    上传直接使用 SendKey()

    WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
    
            // enter the file path onto the file-selection input field
            uploadElement.sendKeys("C:\\newhtml.html");
    
            // check the "I accept the terms of service" check box
            driver.findElement(By.id("terms")).click();
    

    下载时注意: webdriver没有可用的容量去下载, 所以使用 Wget一个自动下载的命令程序
    下载软件并在cmd中试运行, 注意保存下载路径,

     System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
                    String baseUrl = "http://demo.guru99.com/test/yahoo.html";
            WebDriver driver = new FirefoxDriver();
    
            driver.get(baseUrl);
            WebElement downloadButton = driver.findElement(By
            .id("messenger-download"));
            String sourceLocation = downloadButton.getAttribute("href");
            String wget_command = "cmd /c C:\\Wget\\wget.exe -P D: --no-check-certificate " + sourceLocation;
    
            try {
            Process exec = Runtime.getRuntime().exec(wget_command);
            int exitVal = exec.waitFor();
            System.out.println("Exit value: " + exitVal);
            } catch (InterruptedException | IOException ex) {
            System.out.println(ex.toString());
            }
            driver.close();
    

    使用xpath--这个要自己试试

    链接
    专门讲解table的处理:链接
    在HTML中 table的一个识别:

    table

    thread / tbody 两种二级标签

    他们的三级标签都是tr 代表行

    thread 下级tr中对应的列级标签是th
    tbody对应的列级标签是td(格) ; 注意tr表示行

    注意使用chil and self来得到其具体的text
    最好不要使用tr[1]容易出现数组越界
    使用webelement list来得到所有的tr或td
    另外对于动态加载的表,其实需要使用更复杂的代码, 列入需要scroll down来拉去, 然后页面加载等, 这个需要对开发进行核实:到底下拉一次 可能会加载多少行等

        public static void TestTable2() {
            String driverLocationString = "D:\\codding\\seleniumTest\\seleniumDemo1\\DriverFolder\\chromedriver.exe";
            System.setProperty("webdriver.chrome.driver", driverLocationString);
            WebDriver driver = new ChromeDriver();
            driver.get("http://demo.guru99.com/test/web-table-element.php");
            
            WebElement tableTitle = driver.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/thead"));
            List <WebElement> titles = tableTitle.findElements(By.tagName("tr"));
            System.out.println(titles.size());
            if (titles!= null) {
                for(WebElement title: titles) {
                    List <WebElement> columNames = title.findElements(By.tagName("th"));
                    if (columNames!= null) {
                        for (int i = 0; i < columNames.size(); i++) {
                            System.out.print(columNames.get(i).getText()+"    ");
                        }
                        System.out.println();
                    }
                }
            }
            
            WebElement tableContent = driver.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody"));
            List<WebElement> contents = tableContent.findElements(By.tagName("tr"));
            System.out.println(contents.size());
            
            if (contents!=null) {
                for(WebElement row: contents) {
                    List<WebElement> columElements = row.findElements(By.tagName("td"));
                     if (columElements!=null) {
                        for(WebElement colum: columElements) {
                            System.out.print(colum.getText()+" ");
                        }
                    }
                     System.out.println();
                }
            }
            
            
            
            driver.quit(); // using QUIT all windows will close
    
        }
    

    Alert

    1. 点击cancel:driver.switchTo().alert().dismiss();
    2. 点击ok: driver.switchTo().alert().accept();
    3. 获取alert message: driver.switchTo().alert().getText();
    4. 输入信息: driver.switchTo().alert().sendKeys("Text");

    处理Pop-up Window

    在自动化测试中,一个Web应用会打开多个窗口来使用, 有时候我们需要在不同的窗口中进行切换; 当完成操作后, 也需要返回到parent窗口。
    在Selenuim中,WebDriver 也会处理多个窗口。

    Driver.getWindowHandles();  
    

    处理多个已经打开的窗口,可以使用该class来彼此切换, 返回Iterator<String>

    Driver.getWindowhandle()
    

    处理当前当前的窗口;

    1. 打开网站:http://demo.guru99.com/popup.php
    2. 点击“Click Here” 新的窗口就会打开
    3. 新的窗口打开需要用户输入email
    4. 输入Email点击submit
    5. 显示access details
    import java.util.Iterator;      
    import java.util.Set;       
    import org.openqa.selenium.By;      
    import org.openqa.selenium.WebDriver;       
    import org.openqa.selenium.firefox.FirefoxDriver;       
    
    public class WindowHandle_Demo {                
    
        public static void main(String[] args) throws InterruptedException {                                    
                WebDriver driver=new FirefoxDriver();           
    
            //Launching the site.               
                driver.get("http://demo.guru99.com/popup.php");         
            driver.manage().window().maximize();        
    
    driver.findElement(By.xpath("//*[contains(@href,'popup.php')]")).click();           
    
            String MainWindow=driver.getWindowHandle();     
    
            // To handle all new opened window.             
                Set<String> s1=driver.getWindowHandles();       
            Iterator<String> i1=s1.iterator();      
    
            while(i1.hasNext())         
            {       
                String ChildWindow=i1.next();       
    
                if(!MainWindow.equalsIgnoreCase(ChildWindow))           
                {           
    
                        // Switching to Child window
                        driver.switchTo().window(ChildWindow);                                                                                                             
                        driver.findElement(By.name("emailid"))
                        .sendKeys("[gaurav.3n@gmail.com](mailto:gaurav.3n@gmail.com)");                         
    
                        driver.findElement(By.name("btnLogin")).click();            
    
                // Closing the Child Window.
                            driver.close();     
                }       
            }       
            // Switching to Parent window i.e Main Window.
                driver.switchTo().window(MainWindow);               
        }
    }       </pre>
    
    

    CheckBox and Radio Button

    1. Radio button: 使用click()


      radioElement.click()
    2. CheckBox
      切换checkbox是on还是off, 也需要使用click()


      checkboxElement.click()

      检查checkbox是否被点击选择: isSelected()


      isSelected()
      注意:
      增加 wait() 在findelement之前; 使用隐式或显式的wait

    Image Link

    推荐使用By.cssSelector和属性“Title”来找到image link的元素


    cssSelector

    处理DropDown以及多选项

    1. DropDown: 需要import jar org.openqa.selenium.support.ui.Select

    2. new一个Select的实例


      sample
      1
      2
      3
    3. 多选


      multiple Select
    image.png

    Tooltip

    Tooltip 是当鼠标移动到一个元素的时候出现的提示文本。Tooltip 一般都会作为一个元素的 Title 属性。这个属性的值会随着鼠标的移动而显示。这是一个静态的文本知识信息。
    现在,tooltip 已经是可以包含很多的格式、

    • 对于静态tooltip 的获取, 直接使用“title” 属性值来获得
    • 对于包含各种格式的, 需要使用“Advanced User Interactions API”

    advanced User Interactions API的简介

    高级用户交互api 是一种为用户行为如drag drop hovering 多选 鼠标释放等行为的API
    我们可以获取更多的细节:链接

    1. 首先导入需要的jar包: Action Actions
    2. 创建一个“Actions”的对象,建立用户操作的序列, 如 moveToElement(), dragAndDrop()等; driver会被当做是Actions类的一个参数
    Actions builder = new Actions(driver);
    builder.clickAndHold(slider).moveByOffset(50,0).release();
    
    1. 创建Action 对象;调用perform来执行actions对象的build操作。
    Action slideAction = builder.build();
    slideAction.perform();
    

    相关文章

      网友评论

          本文标题:Selenium Testing 2 - java

          本文链接:https://www.haomeiwen.com/subject/ebphpqtx.html