Selenium WebDriver中Implicit Waits()中的错误

时间:2017-09-27 12:40:34

标签: java selenium xpath webdriver

我陷入了一个有趣的境地。

每当我在代码中使用隐式等待时,我的驱动程序就能通过其XPath找到元素。但是,当我注释掉隐式等待命令时,则无法找到该元素。 然后我做了一些研究,后来当我执行代码时,我得到了一种不同的bug。它说"未知错误:无法获得自动化扩展"。

这很有趣,因为等待命令会影响WebDriver在页面上查找元素的方式。

请说明为什么会发生这种情况,如果以前发生过任何事情,请分享您的经验。

抛出错误的代码如下: -

package xyz;

//import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Asnmnt11 
{
    public static void main(String[] args) //throws InterruptedException 
    {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Vardhan\\workspace\\SeleniumProject\\files\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

    driver.manage().window().maximize();
    driver.get("https://facebook.com");
    //driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);



driver.findElement(By.cssSelector("input.inputtext")).sendKeys("user@gmail.com");
        driver.findElement(By.cssSelector("input[tabindex='2']")).sendKeys("password");
        //Thread.sleep(2000);
        driver.findElement(By.xpath(".//*[@id='u_0_2']")).click();

        //driver.manage().timeouts().implicitlyWait(5000, TimeUnit.SECONDS);
        driver.quit();
    }

}

提前致谢。

2 个答案:

答案 0 :(得分:2)

当您删除隐式等待时,驱动程序不知道应该查找该元素的时间。它进行快速搜索,如果元素不存在则会抛出元素未找到异常。

Xpath元素需要更多时间才能找到。因此,有一个隐含的等待总是好的。为什么呢?

  1. 搜索元素可能需要一些时间
  2. 网站仍在加载
  3. 元素仍在加载
  4. 当我在没有任何隐含等待的情况下运行测试时,驱动程序放弃了很快找到元素。

    org.openqa.selenium.NoSuchElementException: 
    no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='u_0_2']"}
    
    Command duration or timeout: 0 milliseconds
    

    这表明驱动程序正在寻找0毫秒的元素并且它没有找到它。因此,有一个隐含的等待总是一个好主意。

    未知错误:无法获得自动化扩展

    这个问题主要是chromedriver和chrome问题。通常是使用与您当前的chrome版本不兼容的较旧的chromedriver版本引起的。 Chrome会自动更新,因此请尝试更新您的chromedriver。

答案 1 :(得分:1)

如果按xpath搜索元素,则需要更多时间进行定位,以便最好使用隐式或显式等待。当我使用你的代码而没有等待一段时间它会抛出NoSuchElementException

AS facebook页面需要加载时间,你正在尝试xpath来定位元素,因此使用隐式或显式等待是好的。

现在你遇到了问题

  

未知错误:无法获得自动扩展

这是chromedriver问题,有时候当我使用ChromeOptions时我也得到了它。因此,与Implicit wait相关的问题完全无关紧要