2

私はSelenium WebDriverを使用していますが、すべて正常に動作していましたが、今日、以下のコードを使用するとタイムアウトになるか、エラーが発生しますUnable to find element with id == //*[@id='ctl00_ContentPlaceHolder1_AddControl1_txtName']

私はこれを使用しようとします:

    public IWebElement GetElementId(string id)
    {
        //return Driver.FindElement(By.Id(id));
        Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(TimeOut));
        return Driver.FindElement(By.Id(id));
    }

そしてこれを試しました:

public IWebElement GetElementId(string id)
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement category = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id(el_id));
    });
}

タイムアウトまたは要素が見つからないというエラーを回避する方法がまだわかりません

助けはありますか?

4

2 に答える 2

5

FluentWait クラスを使用してみてください。

public WebElement fluentWait( final By locator ) {
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
        .withTimeout(30, TimeUnit.SECONDS)
        .pollingEvery(5, TimeUnit.SECONDS)
   .ignoring(NoSuchElementException.class, StaleElementReferenceException.class);

    // use a "custom" ExpectedCondition
    WebElement foo = wait.until( new Function<WebDriver, WebElement>() {
        public WebElement apply( WebDriver driver ) {
            return driver.findElement( locator );
        }
    });
    // usually use one of the built-in ExpectedCondtions
    // WebElement foo = wait.until(
    //     ExpectedConditions.visibilityOfElementLocated( locator );
    return  foo;
};

ここで流暢な待機について読むことができます

または、ロケーターが適切に見つかったかどうかを徹底的に確認してください。

これがお役に立てば幸いです)

于 2012-09-06T15:40:17.613 に答える
1

xpath を使用していますが、使用している findElement で By.Id を次のように変更します

By.xpath("//*[@id='ctl00_ContentPlaceHolder1_AddeCardControl1_txtName']")

                        OR

By.id("ctl00_ContentPlaceHolder1_AddeCardControl1_txtName")

それでもタイムアウトエラーが表示される場合は、次のように xpath で要素名も指定してみてください

//div[@id='element_id']

このように指定するので

//*[@id='ctl00_ContentPlaceHolder1_AddeCardControl1_txtName']

すべての要素の id 属性を検索すると時間がかかる場合があるため、特定の要素を指定すると検索時間が最小限に抑えられます。

うまくいかない場合は、xpath が正しいかどうかを確認してください。

于 2012-09-01T07:21:30.490 に答える