webdriver升级版

作者: c4a1d989518e | 来源:发表于2017-05-25 23:24 被阅读7次

    上次写的时候,还不会markdown语法,现在重新用Markdown整理下,另外在补充些。这里用的语言依然是Python,还有Java语言的,查阅参考文章,其中有更多示例
    先列出新增部分:

    打开浏览器

    from selenium import webdriver
    dr = webdriver.Chrome()
    

    这里可能需要下载Chrome的webdriver,并在Chrome括号中指明路径。

    关闭浏览器

    关闭浏览器有两种方式:

    • close方法
    • quit方法

    close方法关闭当前的浏览器窗口,quit方法不仅关闭窗口,还会彻底的退出webdriver,释放与driver server之间的连接。所以简单来说quit是更加彻底的close,quit会更好的释放资源,适合强迫症和完美主义者。

    from selenium import webdriver
    import time
    
    dr = webdriver.Chrome()
    time.sleep(2)
    print 'browser will be closed'
    dr.quit() # or dr.close()
    print 'browser is closed'
    

    将浏览器最大化

    应用场景:当我们在测试中使用一些基于图像和坐标的辅助测试工具时,我们就会需要使浏览器在每次测试时保存最大化,以便在同一分辨率下进行图像比对和坐标点选。

    webdriver.Chrome().maximize_window()
    

    设置浏览器大小

    应用场景:举个例子,可以把浏览器设置成手机客户端的大小(240,320),这样就能看在手机上什么效果了。

    webdriver.Chrome().set_window_size(240, 320)
    

    得到当前页面的url

    应用场景:判断重定向后的页面,是否与预期页面相同

    webdriver.Chrome().current_url
    

    针对ajax的wait

    针对ajax的元素,需要等待元素加载出来,这时候可以用wait方法,
    until方法会一直等下去,直到

    • 代码块中的内容为true(不为false或没有抛出异常)
    • 超时,也就是超过了timeout设置的时间
    import selenium.webdriver.support.ui as ui
    dr = webdriver.Chrome()
    wait = ui.WebDriverWait(dr, 10)
    wait.until(lambda dr: dr.find_element_by_class_name('label').is_displayed())
    

    超时设置

    正好顺着说了超时操作
    implicit_wait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出异常

    ff = webdriver.Firefox()
    ff.implicitly_wait(10) # seconds
    ff.get("http://somedomain/url_that_delays_loading")
    myDynamicElement = ff.find_element_by_id("myDynamicElement")
    

    一、输入框(text field or textarea)

    • 找到输入框元素:
    WebElement element = driver.findElement(By.id("passwd-id"));
    
    • 将输入框清空:
    element.clear();
    
    • 在输入框中输入内容:
    element.sendKeys(“test”);
    
    • 获取输入框的文本内容:
    element.getText();
    

    二、下拉选择框(Select)

    • 找到下拉选择框的元素:
    Select select = new Select(driver.findElement(By.id("select")));
    
    • 选择对应的选择项:
    select.selectByVisibleText(“mediaAgencyA”);
    

    select.selectByValue(“MA_ID_001”);
    
    • 不选择对应的选择项:
    select.deselectAll();
    select.deselectByValue(“MA_ID_001”);
    select.deselectByVisibleText(“mediaAgencyA”);
    
    • 或者获取选择项的值:
    select.getAllSelectedOptions();
    select.getFirstSelectedOption();
    

    对下拉框进行操作时首先要定位到这个下拉框,new 一个Selcet对象,然后对它进行操作

    例如:

    http://passport.51.com/reg2.5p 这个页面为例。这个页面中有4个下拉框,下面演示4种选中下拉框选项的方法。

    import org.openqa.selenium.By;
    
    import org.openqa.selenium.WebDriver;
    
    import org.openqa.selenium.WebElement;
    
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    import org.openqa.selenium.support.ui.Select;
    
    public class SelectsStudy {
    
    public static void main(String[] args) {
    
    System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
    
    WebDriver dr = new FirefoxDriver();
    
    dr.get("http://passport.51.com/reg2.5p");
    
    //通过下拉列表中选项的索引选中第二项,即2011年
    
    Select selectAge = new Select(dr.findElement(By.id("User_Age")));
    
    selectAge.selectByIndex(2);//Select.selectByIndex
    
    //通过下拉列表中的选项的value属性选中"上海"这一项
    
    Select selectShen = new Select(dr.findElement(By.id("User_Shen")));
    
    selectShen.selectByValue("上海");//Select.selectByValue
    
    //通过下拉列表中选项的可见文本选 中"浦东"这一项
    
    Select selectTown = new Select(dr.findElement(By.id("User_Town")));
    
    selectTown.selectByVisibleText("浦东");//Select.selectByVisibleText
    
    //这里只是想遍历一下下拉列表所有选项,用click进行选中选项
    
    Select selectCity = new Select(dr.findElement(By.id("User_City")));
    
    for(WebElement e : selectCity.getOptions())//Select.getOptions()
    
    e.click();
    
    }
    }
    

    三、单选项(Radio Button)

    • 找到单选框元素:
    WebElement bookMode =driver.findElement(By.id("BookMode"));
    
    • 选择某个单选项:
    bookMode.click();
    
    • 清空某个单选项:
    bookMode.clear();
    
    • 判断某个单选项是否已经被选择:
    bookMode.isSelected();
    

    四、多选项(checkbox)

    • 多选项的操作和单选的差不多:
    WebElement checkbox =driver.findElement(By.id("myCheckbox."));
    
    checkbox.click();
    
    checkbox.clear();
    
    checkbox.isSelected();
    
    checkbox.isEnabled();
    

    五、按钮(button)

    • 找到按钮元素:
    WebElement saveButton = driver.findElement(By.id("save"));
    
    • 点击按钮:
    saveButton.click();
    
    • 判断按钮是否enable:
    saveButton.isEnabled ();
    

    六、左右选择框

    也就是左边是可供选择项,选择后移动到右边的框中,反之亦然。

    例如:

    Select lang = new Select(driver.findElement(By.id("languages")));
    
    lang.selectByVisibleText(“English”);
    
    WebElement addLanguage =driver.findElement(By.id("addButton"));
    
    addLanguage.click();
    

    七、弹出对话框(Popup dialogs)

    
    Alert alert = driver.switchTo().alert();
    
    alert.accept();
    
    alert.dismiss();
    
    alert.getText();
    

    八、表单(Form)

    Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:

    WebElement approve = driver.findElement(By.id("approve"));
    
    approve.click();
    

    approve.submit();//只适合于表单的提交
    

    九、上传文件 (Upload File)

    上传文件的元素操作:

    WebElement adFileUpload = driver.findElement(By.id("WAP-upload"));
    
    String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";
    
    adFileUpload.sendKeys(filePath);
    

    十、拖拉(Drag andDrop)

    
    WebElement element =driver.findElement(By.name("source"));
    
    WebElement target = driver.findElement(By.name("target"));
    
    (new Actions(driver)).dragAndDrop(element, target).perform();
    

    例如:下面这个页面是一个演示拖放元素的页面,你可以把左右页面中的条目拖放到右边的div框中。

    http://koyoz.com/demo/html/drag-drop/drag-drop.html
    
    import org.openqa.selenium.By;
    
    import org.openqa.selenium.WebDriver;
    
    import org.openqa.selenium.WebElement;
    
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    import org.openqa.selenium.interactions.Actions;
    
    public class DragAndDrop {
    
    public static void main(String[] args) {
    
    System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
    
    WebDriver dr = new FirefoxDriver();
    
    dr.get("http://koyoz.com/demo/html/drag-drop/drag-drop.html");
    
    //首先new出要拖入的页面元素对象和目标对象,然后进行拖入。
    
    WebElementelement = dr.findElement(By.id("item1"));
    
    WebElementtarget = dr.findElement(By.id("drop"));
    
    (new Actions(dr)).dragAndDrop(element, target).perform();
    
    //利用循环把其它item也拖入
    
    String id="item" ;
    
    for(int i=2;i<=6;i++){
    
    String item = id+i;
    
    (new Actions(dr)).dragAndDrop(dr.findElement(By.id(item)), target).perform();
    
    }
    }
    
    }
    

    代码很简单,需要注意的是(new Actions(dr)).dragAndDrop(element, target).perform();这句话中,dragAndDrop(element, target)这个方法是定义了“点击element元素对象,然后保持住,直到拖到目标元素对象里面才松开”这一系列动作的Actions,如果你不调用perform()方法,这个Actions是不会执行的。

    十一、导航 (Navigationand History)

    打开一个新的页面:

    driver.navigate().to("http://www.example.com");
    

    通过历史导航返回原页面:

    driver.navigate().forward();
    
    driver.navigate().back();
    

    参考文章:

    selenium webdriver 从入门到提高

    相关文章

      网友评论

        本文标题:webdriver升级版

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