1

ページオブジェクトモデルで明示的な待機を使用して単一ページアプリをテストしようとしています。私が直面している問題は、ページが完全に動的な一部の要素のみであるため、ページが呼び出されるとすぐに明示的な待機が要素のチェックを開始することです何らかのアクションの後に表示されます。要素は作成前であってもチェックされるため、常に「No such Element exception」というエラーが表示されます サンプル コード:

    public class example
    {

    private IWebElement ExampleElement = wait.Until<IWebElement>((d) =>
                {
                    return d.FindElement(By.Id("ExampleElement ID"));
                });
private IWebElement ExampleElement2 = wait.Until<IWebElement>((d) =>
                {
                    return d.FindElement(By.Id("ExampleElement ID"));
                });

    public void example1()
    {
    ExampleElement.click();
    ExampleElement2.click();
    }
    } 

    public class exampleTest
    {
    [Test]
    public void SomeTest()
    {
    example.example1();
    }
    }

ExampleElement2 は ExampleElement のクリック後にのみロードされますが、クリック アクションの前でも ExampleElement2 をチェックし続けるため、それを見つけることができず、例外が発生します。問題は、 for が呼び出される前であっても、要素の存在をチェックしたくないということです。

私は完全に新しいです、事前に感謝します

4

2 に答える 2

1

ここにパターンの問題があるようです。WebElements はクラス レベルであるため、クラスのインスタンスが開始されると、webdriver はすべてを初期化しようとするため、Element2 も待機します。Element2 が動的な場合、クラス レベルでそれを待つことはできません。表示されると予想される状態の後、それを待ちます。

私はクラスレベルで、

private IWebElement ExampleElement2;

そして、する

 public void example1()
    {
    ExampleElement.click();
    ExampleElement2 = wait.Until<IWebElement>((d) =>
                {
                    return d.FindElement(By.Id("ExampleElement ID"));
                });
    ExampleElement2.click();
    }

また、 PageFactoryを見たいと思うかもしれません。コード全体で driver.findElement を繰り返す必要はありません。また、このトピックから外れたその他の明らかな利点もあります :-)。

于 2013-04-15T15:21:11.543 に答える
0

nilesh が彼の回答で述べたように、 の読み込みを延期する必要がありExampleElement2ます。ただし、それは明示的な待機である必要があり、関連する予期される条件を待機する必要があります。たとえば、待機と言うことができますElementIsVisible(Java APIelementToBeClickableでは、要素の型に基づいたような特定の条件を設定できます)。次に、要素が渡された特定の条件を満たしていることを確認します。

PS - コード スニペットをご案内できず申し訳ありません。私は Java の専門家なので、C# を使用して Selenium テストを行ったことはありません。しかし、原則は同じです。

于 2013-04-15T19:09:13.450 に答える