web-dev-qa-db-ja.com

Selenium2.0のisElementPresent

こんにちは、私はWebドライバーを使用しているので、Seleniumを使用する場合はrc関数isElementPresent Selenium rcをエミュレートする必要があるため、次のようにします。

import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebDriverBackedSelenium;
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.firefox.FirefoxDriver;

public class new {
 private static void one_sec() {
  Thread.sleep(4000);
 }
 public static void main(String[] args) {    
  WebDriver driver = new FirefoxDriver();
  driver.get(something1);
  Selenium selenium = new WebDriverBackedSelenium(driver, something1); 
  Selenium.click("//html...");
  one_sec();
  System.out.println(Selenium.isElementPresent("text"));
  WebDriver driverInstance = ((WebDriverBackedSelenium) Selenium).getWrappedDriver();
  ...
  }

そして、isElementPresentの結果として常にfalseになります。もちろん、要素「text」はWeb上にあります(GWTを使用しています)。

13
user729076

私は本当に好きです Rostislav Matl's 代替 WebDriverのSelenium 2への移行、パートNo.1

_driver.findElements(By.className("someclass")).size() > 0;
_

Javadoc: org.openqa.Selenium.WebDriver.findElements(org.openqa.Selenium.By by)

14
Alberto

純粋なWebドライバーを使用して自分で実装できます。

private boolean isElementPresent(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}
8
Dejan Veternik

あなたが見つけようとしている要素がロードされていることがあります、s0はを使用して例外をスローします

findElement(By.xpath(xpathLocator)) </ code> 

したがって、Dejan Veternikが推奨することを行う必要があります。これは、ELEMENTがWebページにロードされるまで待つのに役立ちます。私は、Seleniumを渡し、Webドライバーを抽出しています。これは、私のようにWebDriverBackedSeleniumを使用している場合に役立ちます...

 private boolean isElementPresent(WebDriverBackedSelenium driver, String id) {
        try {
            driver.getWrappedDriver().findElement(By.id(id));
            return true;

        } catch (Exception e) {
            return false;
        }
    }

 
3
Rajat_R

Selenium 2の世界では、要素が存在するかどうかを確認する場合は、find呼び出しをtry catchでラップします。存在しない場合は、エラーがスローされるためです。

try{
  driver.findElement(By.xpath("//div"));
}catch(ElementNotFound e){
  //its not been found
}
3
AutomatedTester

Selenium 2の一部ではなく、次の操作を実行できます。

// Use Selenium implementation or webdriver implementation 
Boolean useSel = false;

/**
     * Function to enable us to find out if an element exists or not.
     *
     * @param String An xpath locator
     * @return boolean True if element is found, otherwise false.
     * @throws Exception
     */
    public boolean isElementPresent(String xpathLocator) {
        return isElementPresent(xpathLocator, false, "");
    }

/**
     * Function to enable us to find out if an element exists or not and display a custom message if not found.
     *
     * @param String An xpath locator
     * @param Boolean Display a custom message
     * @param String The custom message you want to display if the locator is not found
     * @return boolean True if element is found, otherwise false.
     * @throws Exception
     */
    public boolean isElementPresent(String xpathLocator, Boolean displayCustomMessage, String customMessage) {
        try {
            if (useSel) {
                return sel.isElementPresent(xpathLocator);
            } else {
                driver.findElement(By.xpath(xpathLocator));
            }
        } catch (org.openqa.Selenium.NoSuchElementException Ex) {
            if (displayCustomMessage) {
                if (!customMessage.equals("")) {
                    System.out.print(customMessage);
                }
            } else {
                System.out.println("Unable to locate Element: " + xpathLocator);
            }
            return false;
        }
        return true;
    }
3
Ardesco

NodeライブラリSelenium-webdriver 3.6.を使用しています。

driver.findElements(0個以上のアイテムを返す)とdriver.findElement(最初に見つかったアイテムを返すか、NoSuchElementErrorをスローします)があります。

したがって、少なくとも1つの要素が見つかるかどうかのチェックとして、これをお勧めします。おそらくJavaで役立ちます。

driver.findElement(By.className("someclass"));
0
MikeCPT