1

私は Selenium が初めてで、Java はかなり初めてです。私は開発者ではなくテスターなので、Selenium IDE スクリプトをより堅牢で「適切な」ものに徐々に変換しようとしています。残念ながら、私はかなり基本的なタスクに苦労しています。Web ページが読み込まれるとすぐに、ボタンをクリックしたいと思います。これは Selenium IDE で正常に動作しますが、速度を「低速」に設定した場合のみです。

次のコードを使用して動作させることができますが、thread.sleep 行を含めた場合のみです。これは良い考えではないことを読んだので、webDriverWait を使用してよりスマートなものを実装しようとしています。

public class mytestclass {

    private WebDriver driver;
    private String baseUrl;

    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "";
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }


    @Test
    public void test1() throws Exception {
        driver.get(baseUrl + "file:///C:/_VM/testpage.html");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("button_X")));
        //Thread.sleep(2000);
        driver.findElement(By.id("button_X")).click();    
     }

}

したがって、thread.sleep 行の実行時にこれが機能しているという事実は、ボタンが実際に準備ができていないときに、wait.until 行が true を返していると信じさせます。また、ExpectedConditions を visibilityOfElementLocated(By locator) や presentOfElementLocated(By locator) などの他の識別子に切り替えようとしましたが、これらも同じように機能します。

ここで何か間違ったことをしていますか?他に試せることはありますか?

仕事の関係上、残念ながらサイトへのリンクはできません。多くの画像を読み込み、起動時に多くの JavaScript を実行するため、少し時間がかかりますが、待機ロジックを追加したいのはそのためです。

アドバイスをありがとう。

4

1 に答える 1

1

あなたのサイトのスタートアップには jQuery が関係していますか? もしそうなら、あなたはこれを試すことができます。テストで役立つことがわかりました。これは C# ですが、Java に変換できると確信しています。

jQuery の準備が整うまで待ちます。

IWait<IWebDriver> wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(WAITFORELEMENT_TIMEOUT));
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
于 2014-10-22T04:32:06.787 に答える