4

Selenium WebDriver (Java API) を使用して、動的に生成された要素をクリックする必要があります。この要素が WebDriverWait で表示されるのを待ってからクリックします。このクリックは成功しますが、次に別の静的要素をクリックすると、テスト全体がフリーズします。コードは次のとおりです。

webDriver.get(alfrescoURL + "/share/page/create-document");
WebDriverWait wait = new WebDriverWait(webDriver, 10);

WebElement documentTypeList = webDriver.findElement(By.id("template_x002e_create-document_x002e_create-document_x0023_default_documenttype-selected-form-button-button"));
documentTypeList.click();
WebElement listItem = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id("yui-gen100")));
listItem.click();
// Choosing to create in new project
WebElement projectLink = webDriver.findElement(By.id("template_x002e_create-document_x002e_create-document_x0023_default_projecttype-entry1"));
projectLink.click();

documentTypeList.click()ドロップダウン リストを開き、listItem.click()項目をprojectLink.click()選択し、ラジオボタンのグループで選択を行います。テストは で静かにフリーズしprojectLink.click()ます。これはclick()、何らかの理由で発生するはずのないページのリロードを無限に待機しているようです。(アイテムを選択した後にリストが消えるのは、AJAX リクエストを行わない JavaScript によって行われます。)

click()ブロッキングについて私が理解できない何かがあると思います。ページがロードされる場合にのみブロックを試みるとjavadocに記載されています。それにもかかわらず、ここで何らかの理由でブロックを取得します。

前にスレッドスリープを挿入するとprojectLink.click()、テストは正常に機能します。で無限ブロックを取得するという仮説と一致しclick()ます。

前もって感謝します。

4

2 に答える 2

0

ドロップダウンが収縮するよりもテストが速く実行され、次の要素をクリックできない前に、これに遭遇しました。任意のスリープを使用する代わりに (まれに必要になりますが)、ドロップダウンでクラスの変更を待つことができますか?

たとえば、次に進む前にドロップダウンが縮小するのを待ちたい場合は、select のクラスが「アクティブ」から「クローズ」に変わるのを待ちます。もちろん、これは HTML にこれらの動的クラスが配置されていることを前提としています。

もう 1 つの可能性は、次のようなインスタンスに十分なパディングを与えて、暗黙的な待機を設定することです。

driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
于 2013-02-25T20:16:17.347 に答える
0

他のクリック オプションも試してみることをお勧めします。

  • a)Actions#click()
  • b) Javascript クリック()

これらのクリックのいずれかが機能する場合は、報告が必要なセレンの WebElement Click メソッドに問題があることを意味します。

于 2019-11-22T16:46:11.507 に答える