0

我在同一个程序中有两个显式等待。一个用于WaitForElement,一个用于WaitForPageLoad。但它似乎不起作用。当我将其中一个更改为隐式等待时,它工作正常。否则代码本身会在开始时失败。Selenium 的初学者,所以不知道它为什么会失败。

错误:

 NoSuchElementException

等待:在两种不同的方法中使用了这些

  WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3));
    {
       IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
       {
          return d.FindElement(By.ClassName("header"));
       });
       if (myDynamicElement != null) return true;
    }

  WebDriverWait _wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3));
    {
       IWebElement _myDynamicElement = _wait.Until<IWebElement>((d) =>
       {
          return d.FindElement(By.ClassName("header-buttons"));
       });
       if (_myDynamicElement != null) return true;
    }

程序中使用该方法的代码

   WaitForElementPresent(By.CssSelector("div[class='tagged-text search-text']>input"));
 //Enter the item to search
   driver.FindElement(By.CssSelector("div[class='tagged-text search-text']>input")).Clear();
   driver.FindElement(By.CssSelector("div[class='tagged-text search-text']>input")).SendKeys(searchItem + Keys.Enter);
4

1 回答 1

1

我认为等待元素的更通用的方法会更适合您的使用。因此,请改用通用表达式并传入您的搜索条件。例如:

public void WaitForElementById(string elementId, int timeout = 5)
{
    //Where '_driver' is the instance of your WebDriver
    WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 0, timeout));
    IWebElement element = _wait.Until(x => x.FindElement(By.Id(elementId)));
}

如果等待超时,这将引发异常,因此您还可以添加 try/catch 以不同方式报告失败。我个人在我的测试解决方案中使用这个开关,该开关对我常用的每种搜索类型都有一个案例。然后我传入搜索类型搜索词(例如 elementAttribute ID、字符串 myTextboxID)。

话虽如此,我看不出您的代码有任何明显错误会导致它无法工作。

于 2013-06-05T22:50:54.157 回答