大家好 我正在使用webdriver,所以如果我想使用selenium; s 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而得到错误,当然元素“text”在网上(使用GWT)。
答案 0 :(得分:12)
我非常喜欢Rostislav Matl's替代Moving to Selenium 2 on WebDriver, Part No.1:
driver.findElements(By.className("someclass")).size() > 0;
Javadoc:org.openqa.selenium.WebDriver.findElements(org.openqa.selenium.By by)
答案 1 :(得分:7)
您可以使用纯webdriver自己实现它:
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
答案 2 :(得分:3)
在Selenium 2世界中,如果你想找到一个元素是否存在,你只需将find调用包装在try catch中,因为如果它不存在则会抛出错误。
try{
driver.findElement(By.xpath("//div"));
}catch(ElementNotFound e){
//its not been found
}
答案 3 :(得分:3)
不是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;
}
答案 4 :(得分:3)
有时您尝试查找的元素正在加载,s0将使用
findElement(By.xpath(xpathLocator))
引发异常
因此我们需要做Dejan Veternik所推荐的事情,它将有助于等待ELEMENT加载到网页中,我通过Selenium并提取webdriver,这有助于你像我一样使用WebDriverBackedSelenium ...
findElement(By.xpath(xpathLocator))
答案 5 :(得分:0)
我正在使用节点库 selenium-webdriver 3.6.0 。
它具有 driver.findElements (返回零个或多个项目)和 driver.findElement (返回找到的第一个项目或抛出NoSuchElementError)。
因此,我建议将此作为检查是否可以找到至少一个元素的检查。在Java中可能有用。
driver.findElement(By.className("someclass"));