【问题标题】:Test script is not wait in specific page测试脚本不在特定页面中等待
【发布时间】:2021-07-10 21:10:03
【问题描述】:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.XPath(".//*[@class = 'search-box']")).SendKeys("Samsung");
Console.WriteLine("confirm!");

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.XPath(".//*[@class = 'search-icon']")).Click();
Console.WriteLine("confirm!");

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.ClassName("fvrt-btn")).Click();
Console.WriteLine("confirm!");

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.XPath(".//*[@class = 'link-text']/div/div/div/div[a]/div/div/div")).Click();
Console.WriteLine("confirm!");

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.ClassName("ufvrt-btn")).Click();
Console.WriteLine("confirm!");

// 此行无效,测试脚本未在特定页面等待。 driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

【问题讨论】:

  • ImplicitWait 用于等待 x 秒以在当前页面上找到元素。您正在对多个元素执行.Click,其中一些元素可能会导航到另一个页面。所以,简而言之,ImplicitWait 不会阻止浏览器导航。
  • 看起来您可能需要等待页面加载才能执行某些代码块,您可以在此处阅读有关等待页面加载的更多信息wait for page load in selenium
  • 谢谢我会检查它
  • ImplicitWait 应该只在你的代码中定义一次,而不是每次你想找到一个元素。您将ImplicitWaitExplicitWait 的用法混合在一起
  • @JD2775 有时需要更改隐式等待期,但在极少数情况下。一般来说是正确的,隐式等待在项目开始时定义一次。

标签: c# selenium timeout


【解决方案1】:

您应该使用显式等待而不是隐式等待。试试这个:

WebDriverWait wait;
wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(element));

其中element 是元素定位器,例如代码第二行的By.XPath(".//*[@class = 'search-box']")
等待超时通常设置为 30 秒,以允许页面完全加载。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多