こんにちは、私は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を使用しています)。
私は本当に好きです 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)
純粋なWebドライバーを使用して自分で実装できます。
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
あなたが見つけようとしている要素がロードされていることがあります、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;
}
}
Selenium 2の世界では、要素が存在するかどうかを確認する場合は、find呼び出しをtry catchでラップします。存在しない場合は、エラーがスローされるためです。
try{
driver.findElement(By.xpath("//div"));
}catch(ElementNotFound e){
//its not been found
}
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;
}
NodeライブラリSelenium-webdriver 3.6.を使用しています。
driver.findElements(0個以上のアイテムを返す)とdriver.findElement(最初に見つかったアイテムを返すか、NoSuchElementErrorをスローします)があります。
したがって、少なくとも1つの要素が見つかるかどうかのチェックとして、これをお勧めします。おそらくJavaで役立ちます。
driver.findElement(By.className("someclass"));