• selenium 找不到元素 (显式等待 和隐式等待的区别)


    selenium自动化页面元素不存在异常发生的原因有一下几点:

    (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功。此时可以加载页面等待时间。

    (2)查到的元素没有在当前的iframe或者frame中。此时需要切换至对应的iframe或者frame中才行。

     (3)元素错误。

    解决页面加载时间所引起的元素找不到,我们可以为页面设置加载时间。时间的设置分为以下三种:

    (1)显式等待

    显示等待是针对于某个特定的元素设置的等待时间,如果在规定的时间范围内,没有找到元素,则会抛出异常,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作。

    public static void main(String[] args) throws IOException {

    System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
    ChromeOptions Options = new ChromeOptions();
    Options.addArguments("user-data-dir=C:\Users\happy\AppData\Local\Google\Chrome\User Data");
    WebDriver driver = new ChromeDriver(Options);
    try {

    WebDriverWait wait = new WebDriverWait(driver, 10, 1);
    // 每隔1秒去调用一下until中的函数,默认是0.5秒,如果等待10秒还没有找到元素 。则抛出异常。
    wait.until(new ExpectedCondition<WebElement>() {

    @Override
    public WebElement apply(WebDriver driver) {
    driver.findElement(By.id("kw"));

    return driver.findElement(By.id("kw"));
    }

    }).sendKeys("我是一个自动化测试小脚本");

    } finally {
    driver.close();
    Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
    Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
    }
    }

    (2)隐式等待

    隐式等待是设置的全局等待,分为1、页面加载超时等待 ;2、页面元素加载超时;3、异步脚本超时

    如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

    public static void main(String[] args) throws IOException {

    System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
    ChromeOptions Options = new ChromeOptions();
    Options.addArguments("user-data-dir=C:\Users\happy\AppData\Local\Google\Chrome\User Data");
    WebDriver driver = new ChromeDriver(Options);

    try {
    //页面加载超时时间设置为5s
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
    driver.get("https://www.baidu.com/");
    //定位对象时给10s 的时间, 如果10s 内还定位不到则抛出异常
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.findElement(By.id("kw")).sendKeys("隐式等待");
    //异步脚本的超时时间设置成3s
    driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);

    } finally {
    driver.close();
    Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
    Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
    }
    }

    (3)线程等待

    线程等待是java语言中的线程类Thread类中的sleep()方法。此等待是很死板的,需要等待时间结束才会执行相关代码。该方法需要抛出InterruptedException 异常。一般不建议使用,但是在弹窗处理,可以优先选择线程等待。

    public static void main(String[] args) throws IOException, InterruptedException {

    System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
    ChromeOptions Options = new ChromeOptions();
    Options.addArguments("user-data-dir=C:\Users\happy\AppData\Local\Google\Chrome\User Data");
    WebDriver driver = new ChromeDriver(Options);

    try {

    Thread.sleep(5000);
    driver.findElement(By.id("kw")).sendKeys("线程等待");
    } finally {
    driver.close();
    Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
    Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
    }
    }

  • 相关阅读:
    WINFORM如何禁止调整窗体大小
    C#发布程序添加其他程序文件
    C#发布程序添加其他程序文件
    C# AES加密解密
    C# AES加密解密
    C# winform combobox控件中子项加删除按钮
    C# winform combobox控件中子项加删除按钮
    1017:浮点型数据类型存储空间大小
    1017:浮点型数据类型存储空间大小
    1016:整型数据类型存储空间大小
  • 原文地址:https://www.cnblogs.com/linxinmeng/p/6930197.html
Copyright © 2020-2023  润新知