1

登録ページを自動化するために WebDriver(Eclipse -Java) を使用しています。「登録」ボタンをクリックすると、「成功メッセージ」が表示され、同じことを検証する必要があります。

IE8でこれを正常に実行できます。しかし、Firefox で同じことを検証することはできません。私は別の待機を試みました 1. d1.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

  1. WebDriverWait 待機 = 新しい WebDriverWait(ドライバー, 10); wait.withTimeout(30, TimeUnit.SECONDS); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ElmId"));

  2. 待機待機 = 新しい FluentWait 待機 = 新しい FluentWait(d1).withTimeout(60, SECONDS); wait.until(new Function() wait.until(ExpectedConditions.visibilityOf(d1.findElement(By.id("elementid"))));

誰かが同様の問題に直面しましたか? 解決策はありますか?

4

2 に答える 2

0

ボタンをクリックした後のこの「成功メッセージ」: ajax/javascript で表示されますか、それともページをリロードしますか?

js で実行している場合、WebDriver コマンドでメッセージを検証できない場合があり、検証にも js を使用する必要があります。何かのようなもの:

Object successMessage = null;
int counter = 0;

    while ((successMessage == null) && counter < 5)
    {
        try
        {
            ((JavascriptExecutor)driver).executeScript("return document.getElementById('yourId')");
        }
        catch (Exception e)
        {
            counter +=1;
        }
    }

    if (successMessage != null) //would be better to use some assertion instead of conditional statement
    {
        //OK
    }
    else
    {
        //throw exception
    }

while ループは、疑似待機機能の醜い方法です。要素を待つ必要がない場合は、削除することもできます。

代替案は

Object result = ((JavascriptExecutor)driver).executeScript("return document.body.innerHtml"); 
String html = result.toString();

次に、手動でhtmlを解析します。

于 2012-05-16T17:43:32.557 に答える
0

たぶん、他の条件タイプで試すことができますか?または、apply メソッドをオーバーライドして、独自のコードを作成することもできます。提供された条件を使用しても十分でない場合はほとんどありませんでした。独自のバージョンの apply メソッドを使用して初めて、成功しました。

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
        .pollingEvery(pollingInterval,
            TimeUnit.MILLISECONDS);
    return wait.until(new ExpectedCondition<WebElement>() {

        @Override
        public WebElement apply(WebDriver arg0) {
            List<WebElement> findElements = driver.findElements(By.className(someClassName));
            for (WebElement webElement : findElements) {
                if (webElement.getText().equals(string)) {
                    return webElement;
                }
            }
            return null;
        }
    });

たとえば、このようなものはかなり役に立ちました。

于 2012-05-09T08:49:22.357 に答える