C#Selenium WebDriver在继续之前等待一些元素完全加载

时间:2017-10-17 07:19:43

标签: c# selenium testing selenium-webdriver

以下是我想通过Selenium WebDriver做的事情:

  1. 转到https://www.for-sale.ie/adidas
  2. 点击过滤器
  3. 点击过滤后的第一个广告
  4. 它的作用是在过滤之前点击第一个广告(整个页面不会重新加载进行过滤,只是广告列表)

    var url = "https://www.for-sale.ie/adidas";
    RemoteWebDriver _driver = new FirefoxDriver();
    _driver.Manage().Window.Maximize();
    _driver.Navigate().GoToUrl(url);
    
    _driver.FindElement(By.CssSelector("#jsFilterItems_2 > ul > li:nth-child(2) > div > label > input")).Click();
    System.Threading.Thread.Sleep(3000);
    _driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2")).Click();
    

    我发现使其工作的唯一方法是添加Thread.Sleep,这不是最佳解决方案。我也试图管理超时但没有成功。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

以下是我在评论中通过Grasshopper找到的解决方案:

var url = "https://www.for-sale.ie/adidas";
_driver = new FirefoxDriver();
_driver.Manage().Window.Maximize();
_driver.Navigate().GoToUrl(url);

var firstAd = _driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2"));

_driver.FindElement(By.CssSelector("#jsFilterItems_2 > ul > li:nth-child(2) > div > label > input")).Click();

var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.StalenessOf(firstAd));

_driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2")).Click();

首先,我获得了该页面的第一个广告(在过滤之前),然后我希望当我点击过滤器时,此广告不再通过StalenessOf功能附加到DOM。我终于可以获得过滤后的广告了。