美文网首页
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