2017-11-20 8 views
0

Linqを使用しようとすると構文上問題が発生します。単に要素にテキストが含まれているかどうかを確認してから、そのテキストが表示されるのを待ち、それをクリックするだけです。これは、私が探している要素がスライダにあるため、スライダが関連するテキストを表示するのを待ってから選択できるようにする必要があるからです。要素を表示するのを待つリンクを書き込む方法は?

以下OpenQA.selenium.By

public void SelectReasonsToBookWithUsLinks(string itemName, string linkText) 
{ 
    var ReasonsBookWithUsLinks = _driver.FindElements(HomepageResponsiveElements.BookWithUsLinks); 

    if (ReasonsBookWithUsLinks.Any(x => x.Text == linkText)) 
    {        
     _driver.WaitForElementToExist(ReasonsBookWithUsLinks.SingleOrDefault(x => x.Text == linkText).Displayed, 120); 
     ReasonsBookWithUsLinks.Single(x => x.Text ==linkText).Click(); 
    } 
} 

UpdateへacannotのCONVERブール値として誤っているとして、私はこれを書くことができますどのように

WaitForElementToExist方法:

public static IWebElement WaitForElementToExist(this IWebDriver driver, By locator, int waitSeconds) 
    { 
     return new WebDriverWait(driver, TimeSpan.FromSeconds((double) waitSeconds)).Until<IWebElement>(ExpectedConditions.ElementExists(locator)); 
    } 
+0

をあなたは_driver.WaitForElementToExistメソッドのコードを示してもらえますか? – rs232

+0

@ rs232今質問に含めました – BruceyBandit

答えて

0

Click方法ターゲット要素が表示されていないか対話可能でない場合は例外を発生させ、Singleはない場合はSystem.InvalidOperationExceptionを発生させますシングルマッチ。

だから、単純に期待されるような種類の例外はありませんまで再試行するウェイターにアクションをラップすることができます:

public void SelectReasonsToBookWithUsLinks(string itemName, string linkText) { 
    var wait = new DefaultWait<IWebDriver>(_driver); 
    wait.IgnoreExceptionTypes(
     typeof(System.InvalidOperationException), 
     typeof(InvalidElementStateException), 
     typeof(ElementNotVisibleException), 
     typeof(StaleElementReferenceException) 
    ); 

    wait.Until(drv => { 
     drv.FindElements(HomepageResponsiveElements.BookWithUsLinks) 
      .Single(elm => elm.Text == linkText) 
      .Click(); 
     return true; 
     }); 
} 
関連する問題