• Selenium常见API


    基于Java和Python常用的SeleniumAPI

    常用API Java Python
    打开浏览器 new XXXXDriver() webdriver.XXX()
    隐式等待 待确认 implicitly_wait()
    获取网址 get() get()
    关闭当前页面 close() close()
    关闭所有页面 quit() quit()
    浏览器后退 back() back()
    浏览器前进 forward() forward()
    浏览器最大化 maximize() maximize_window()
    设置浏览器大小 setSize(new Dimension(width,heigth)) set_window_size(width,heigth)
    控件元素定位 findElement(By.XX()) find_element_by_xx()
    获取当前页面Title getTitle() title
    获取当前页面源码 getPageSource() page_source
    点击 click() click()
    文本框输入 sendkeys() send_keys()
    清空文本框 clear() clear()
    获取控件元素文本 getText() text
    获取控件元素属性值 getAttribute() get_attribute()
    鼠标右击 contextClick() context_click()
    鼠标双击 doubleClick() double_click()
    拖动 dragAndDrop() drag_and_drop()
    鼠标移动到某个元素上 moveToElement() move_to_element()
    切换Frame switchTo.frame() switch_to.frame()
    切换回默认Frame switchTo().defaultContent() switch_to.default_content()
    切换窗口 switchTo.window() switch_to.window()
    切换至警告框 switchTo.alert() switch_to.alert
    警告框确认 accept() accept()
    警告框取消 dismiss() dismiss()
    获取当前句柄 getWindowHandle() current_window_handle
    获取所有句柄 getWindowHandles() window_handles()
    判断元素是否可见 isDisplayed() is_displayed()
    下拉框选取 selectByIndex()、selectByValue()、selectByVisibleText() select_by_index()、select_by_value()、select_by_visible_text()
    执行JS executeScript() execute_script()
    截图操作 getScreenshotAs() get_screenshot_as_file()

    相关例子

    切换警告框
    • Python
        def test_alert(self):
            driver = webdriver.Chrome()
            driver.get("file:///XXXXX/index.html")
            time.sleep(1)
            # Alert框:只有一个确定按钮
            driver.find_element_by_class_name("alert").click()
            time.sleep(1)
            alert = driver.switch_to.alert
            time.sleep(1)
            alert.accept()
            # Confirm框:含确定和取消按钮
            driver.find_element_by_class_name("confirm").click()
            time.sleep(1)
            confirm = driver.switch_to.alert
            time.sleep(1)
            confirm.dismiss()
            time.sleep(1)
            confirm.accept()
            time.sleep(1)
            # Prompt框:可以输入文本的警告框
            driver.find_element_by_class_name("prompt").click()
            time.sleep(1)
            prompt = driver.switch_to.alert
            time.sleep(1)
            prompt.send_keys("Just test")
            time.sleep(1)
            prompt.accept()
            prompt.accept()
    
    • Java
        //切换至警告弹窗
        public void testAlert() throws InterruptedException {
            WebDriver driver = new ChromeDriver();
            driver.get("file:///XXXXX/index.html");
            sleep(1000);
            //  Alert框:只有一个确定按钮
            driver.findElement(By.xpath("//*[@id="alert"]/input")).click();
            sleep(1000);
            Alert alart = driver.switchTo().alert();
            alart.accept();
            sleep(1000);
            //Confirm框:含有确定和取消按钮
            driver.findElement(By.xpath("//*[@id="confirm"]/input")).click();
            sleep(1000);
            Alert alert2 = driver.switchTo().alert();
            alert2.dismiss();
            sleep(1000);
            alart.accept();
            sleep(1000);
            driver.findElement(By.className("prompt")).click();
            sleep(1000);
            Alert prompt = driver.switchTo().alert();
            sleep(1000);
            prompt.sendKeys("Just test");
            sleep(1000);
            prompt.accept();
            prompt.accept();
    
    切换Frame
    • Python
        def test_frame(self):
            driver = webdriver.Chrome()
            driver.get("file:///XXXXX/index.html")
            time.sleep(1)
            # 通过定位到Frame控件方式进行切换
            # ele = driver.find_element_by_name("aa")
            ele = driver.find_element_by_class_name("frame")
            time.sleep(1)
            driver.switch_to.frame(ele)
            # 直接通过Frame的ID进行切换
            # driver.switch_to.frame("frame")
            text=driver.find_element_by_class_name("widgetStyle").text
            print(text)
            # 切换回外层Frame
            driver.switch_to.default_content()
            time.sleep(1)
            print(driver.find_element_by_class_name("widgetStyle").text)
    
    • Java
    //    切换frame
        public void testFrame() throws InterruptedException {
            driver.get("file:///XXXXX/index.html");
            sleep(1000);
            //通过定位到Frame控件方式进行切换
            WebElement frame = driver.findElement(By.name("aa"));
            driver.switchTo().frame(frame);
            //直接通过Frame的ID进行切换
    //        driver.switchTo().frame("frame");
            String text = driver.findElement(By.className("widgetStyle")).getText();
            System.out.println(text);
            //切换回外层Frame
            driver.switchTo().defaultContent();
            sleep(1000);
            System.out.println(driver.findElement(By.className("widgetStyle")).getText());
        }
    
    
    多窗口切换
    • Python
        def test_window(self):
            driver = webdriver.Chrome()
            driver.get("file:///XXXXX/index.html")
            time.sleep(1)
            # 获取当前窗口的handle
            current_handle = driver.current_window_handle
            driver.find_element_by_class_name("open").click()
            # 遍历当前浏览器打开的窗口的handle
            for handle in driver.window_handles:
                # 判断是否在当前窗口,是跳过,否则切换
                if handle == current_handle:
                    print(handle)
                    continue
                driver.switch_to.window(handle)
                print(handle)
            time.sleep(3)
            print(driver.title)
    
    • Java
    //    切换到新窗口
        public void testWindow() throws InterruptedException {
            driver.get("file:///XXXXX/index.html");
            sleep(3);
            driver.findElement(By.className("open")).click();
            sleep(3000);
            String handle = driver.getWindowHandle();
            for (String handles : driver.getWindowHandles()) {
                if (handles.equals(handle)) {
                    System.out.println(handles);
                    continue;
                } else {
                    driver.switchTo().window(handles);
                    System.out.println(handles);
                }
            }
            sleep(3000);
            System.out.println(driver.getTitle());
        }
    
    显示等待
    • Python
        # 封装显示等待,Usage:find_element_until_visibility(driver,(By.XXX,"XXX"))
        def find_element_until_visibility(self,driver,locator,timeout=30):
            try:
                element = WebDriverWait(driver,timeout).until(expected_conditions.presence_of_element_located(locator))
                return element
            except NoSuchElementException as e:
                print("Element not Found:")
    
    • Java
        public static WebElement findElement(By by,int time){
            WebElement element = null;
            try{
                WebDriverWait wait = new WebDriverWait(driver,time);
                wait.until(ExpectedConditions.presenceOfElementLocated(by));
                element = driver.findElement(by);
            }catch (Exception e){
                System.out.println("元素:"+ by +" 没找到");
                e.printStackTrace();
            }
            return element;
        }
    
    执行JS脚本
    • Python
        def test_js(self):
            driver = webdriver.Chrome()
            driver.get("file:///XXXXX/index.html")
            time.sleep(1)
            # 设置窗口大小为500*800
            driver.set_window_size(500,800)
            time.sleep(1)
            # 通过JS脚本,将窗口移动至2000*3000
            driver.execute_script("window.scrollTo(2000,3000)")
            time.sleep(2)
            # 通过JS脚本,将窗口移动至1000*0
            driver.execute_script("window.scrollTo(1000,0)")
            time.sleep(2)
            # 通过JS脚本,将窗口移动至0*3000
            driver.execute_script("window.scrollTo(0,3000)")
    
    • Java
    //    执行JavaScript
        public void testJavaScript() throws InterruptedException {
            driver.get("file:///XXXXX/index.html");
            JavascriptExecutor js = (JavascriptExecutor) driver;
            js.executeScript("document.getElementById("user").setAttribute("type","password")");
            sleep(3000);
            js.executeScript("document.getElementById("user").value = "Parson"");
            sleep(3000);
            js.executeScript("document.getElementById("user").setAttribute("type","text")");
            js.executeScript("document.getElementById("user").value = "Password"");
            driver.findElement(By.className("wait")).click();
            WebDriverWait wait = new WebDriverWait(driver, 30);
            wait.until(ExpectedConditions.presenceOfElementLocated(By.className("red")));
            String text = driver.findElement(By.className("red")).getText();
            Assert.assertEquals(text,"wait for display");
        }
    
    下拉框操作
    • Python
        def test_select(self):
            driver = webdriver.Chrome()
            driver.get("file:///XXXXX/index.html")
            time.sleep(1)
            ele = driver.find_element_by_id("moreSelect")
            selector = Select(ele)
            selector.select_by_index(2)
            time.sleep(3)
            selector.select_by_value("Honor")
    
    • Java
        public void testselect() throws InterruptedException {
            driver.get("file:///XXXXX/index.html");
            Thread.sleep(3000);
            WebElement ele = driver.findElement(By.id("moreSelect"));
            Select selector = new Select(ele);
            selector.selectByIndex(2);
            Thread.sleep(3000);
            selector.selectByValue("Honor");
            
    
  • 相关阅读:
    form表单为什么不能提交
    遇到了消息堆积,但是问题不大
    面试题:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?
    Dubbo学习地址
    Dubbo入门到实战2
    Dubbo入门到实战
    Mybatis 的三种执行器
    从源码理解Druid连接池原理
    Getting NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()
    解决问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • 原文地址:https://www.cnblogs.com/91parson/p/13094499.html
Copyright © 2020-2023  润新知