0

オーバーレイから「X」アイコンをクリックするシナリオがあります。selenium.isElementPresent( "// img [@ src ='close.jpg']")を使用して要素をチェックすると; trueを返しています。しかし、selenium.click( "// img [contains(@src、'close.jpg')]")を実行すると; アクションは、「要素は現在表示されていないため、操作されない可能性があります」という例外をスローします。

すべてのタイプのxpathで試しましたが、問題を解決できませんでした。

4

1 に答える 1

3

まず、いくつかの方法を試してみてください。

public boolean isElementPresent(By selector)
   {
       return driver.findElements(selector).size()>0;
   }

    public boolean isElementVisible(By selector){
        return driver.findElement(selector).isDisplayed();
    }

次に、ページが強制的にレンダリングされない場合は、いくつかの待機メカニズムを使用してみてください。

Thread.sleep(1000);


driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);

およびfluentWaitメカニズム:。

  public WebElement fluentWait(final By locator){
            Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                    .withTimeout(30, TimeUnit.SECONDS)
                    .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(org.openqa.selenium.NoSuchElementException.class);
            WebElement foo = wait.until(
                    new Function<WebDriver, WebElement>() {
                        public WebElement apply(WebDriver driver) {
                            return driver.findElement(locator);
                        }
                    }
            );
            return  foo;              }     ;
    fluentWait(By.xpath(..blablabla...)).click();

jsCodeインジェクションを作成することもできます:1)jQueryがサポートされている場合

String cssSelector="blablabla";
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSelector+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

2)DOMモデルを介して必要な要素を見つける:例:

String js="document.getElementsByTagName('div')[34].click();"
jsCodeExecution(js);
public void jsCodeExecution(String jsCode){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(jsCode);
        js.executeScript(stringBuilder.toString());
    }

また、問題がどこにあるかを正確に確認するために、段階的にデバッグしてみてください。お役に立てば幸いです。

さらに、見つかったcssセレクターとxpathをfirepathで検証することをお勧めします(firefoxのfirebugへのアドオン): ここに画像の説明を入力してください

于 2012-11-28T12:42:30.080 に答える