2017-10-17 119 views
0

怎么回事满载一些元素是我想通过硒的webdriver做什么:C#硒的webdriver等待之前

  1. 转到https://www.for-sale.ie/adidas
  2. 点击过滤器
  3. 点击过滤完成后的第一个广告

它所做的是在过滤之前点击第一个广告(整个页面不会重新加载以进行过滤,只是广告列表)

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这不是最好的解决方案。我也尝试管理超时但没有成功。任何建议?

+0

您应该使用ExpectedConditions等待页面更新 - https://seleniumhq.github.io/selenium/docs/api/dotnet/html/T_OpenQA_Selenium_Support_UI_ExpectedConditions.htm – Grasshopper

+0

太棒了!谢谢!我会解释我所做的感谢您的评论。 – Gun

回答

0

这是在评论我通过蝈蝈找到了解决办法:

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(); 

首先,我得到的页面的第一个广告(滤波前),那么我希望这个广告将不再附加到DOM当我点击过滤器时,通过StalenessOf函数。我终于可以获得过滤的广告。

+0

你应该接受这个答案。 – IamBatman

+1

由于这是我的答案,我必须等待2天才能接受。我明天会做。 – Gun