为什么Webdriver在隐式等待上等待的时间比定义的时间长?

时间:2019-03-20 00:14:50

标签: java selenium webdriver

我正在开始一门有关使用Java中的Selenium / Web驱动程序进行自动化/测试的新课程。 为了进行测试,我们有一个python Web应用程序(使用flask),它只是虚构博客的条目/帖子的基本CRUD。

在解释隐式等待和显式等待期间,该示例将插入一个新条目,并使用隐式等待来等待成功消息。 鉴于Flask应用程序在本地运行,因此测试等待的速度还不够慢。因此,教授在响应方法中放置了“ time.sleep()”,因此返回消息可能需要更长的时间。

这是响应方法的一部分:

elapsed_time=randint(10,12)
time.sleep(elapsed_time)
flash("Entry '" + entry.title + "' created successfully." + str(elapsed_time), "success")

在测试类的设置方法中:

@Before
public void setUp() {
    System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.get("localhost:5000");
}

这当然可以,因为隐式等待时间设置为15秒,并且应用程序的响应时间不会超过12秒。

问题是,如果我将等待时间设置为1秒,它仍然可以使用,即使我删除了整行,它仍然可以使用。 (有关找不到元素的错误)

我问教授为什么这没有失败,为什么继续等待比我设置的隐式等待(1秒)更多,他不确定。他提到他认为某个地方有一些默认时间,但没有给我任何精确度。

所以,为什么如果我将隐式等待时间设置为1秒,那么在尝试查找消息时它不会失败?

我缺少什么?

找到消息的代码是:

    String currentMessage = driver.findElement(By.xpath("/html/body/div[2]/div[1]/div[1]/div/span")).getText();
    System.out.println(currentMessage);

    assertTrue(currentMessage.contains("Entry 'My newest post' created successfully."));

1 个答案:

答案 0 :(得分:0)

完全加载页面需要多少时间?也许您的页面未完全加载。尝试将两个等待时间都设置为1秒,然后尝试一下。

  1. 将页面超时设置为1秒。

    driver.manage()。timeouts()。pageLoadTimeout(1,TimeUnit.SECONDS);

  2. 将隐式等待时间设置为1秒。

    driver.manage()。timeouts()。pageLoadTimeout(1,TimeUnit.SECONDS);