私はSelenium WebDriverを数週間使っていますが、私のプロジェクトはほぼ完了していますが、Selenium C# - 「ロケータで」のない要素が存在する
[FindsBy(How = How.XPath, Using = "//div[@class='k-widget k-window' and not(contains(@style,'display: none;'))]//button[text()='Confirmar']")]
private IWebElement GenericConfirmButton { get; set; }
:私のプロジェクトで
が、私はクラスですべてのものを分け、私は私の要素を入れてクラスがあります、次の例のように宣言(と同じクラスで、私は私のテストで実装された機能を置きます)
:は以下のコードを(その別のクラスで)実行private void ClickConfirmButtonIfVisible()
{
if (GenericConfirmButton.IsVisible())
GenericConfirmButton.SetClick();
}
機能のisVisible():
私の機能の一つであります
public static bool IsVisible(this IWebElement element) { try { new WebDriverWait(GeneralProperties.Driver, TimeSpan.FromMilliseconds(0)) .Until(ExpectedConditions.ElementToBeClickable(element)); if (element.Enabled && element.Displayed) { return true; } else return false; } catch (WebDriverTimeoutException) { return false; } }
私の問題は次のとおりです。この関数IsVisible()は、(要素が存在しない場合)実行に約5秒かかります。私の目的は、ボタン "Confirmar"を押した場合、要素が存在するかどうかを確認し、そうでない場合は、偽を返します。
私はすでにElementExists代わりのElementToBeClickableを使用しようとしましたが、私はIWebElement要素を宣言するためにseparetedクラスを使用すると、この機能は、ことで宣言が必要なので、私は(それを行う方法がわかりません)。私はElementExistsを使用したいと思います(私は今よりも速く動くと信じています)。あなたが他の方法を知っていて、私を助けることができたら、私は本当にそれを前立てます。
それだけです。ありがとう!
代わりにXPathセレクタをCSSセレクタに置き換えてみましたか?この記事では、CSSセレクタのパフォーマンスがより良いことを示唆しています。 http://elementalselenium.com/tips/32-xpath-vs-css – DaveRead
私がテストを行っているサイトの要素は99%動的であるため、私が行ったすべての研究では、XPathセレクタを使用するようになっています。 とにかくCSSセレクタを試してみます。ありがとう! –
これは直ちに復帰すれば厳しいです...もしあなたが0.5秒待っていれば要素が存在するでしょうか?これは、一般に、私がテストロジック内のif文を避けようとする理由です。目に見えるかどうかを知るロジックを書くことができれば(これはテストケースで知っておくべきことです)、それはあなたがすべきことです。私にとって、これは賢明にしようとしているテストロジックの兆候であり、一般的には欲求不満につながります。 – mrfreester