2015-06-23 31 views
1

我需要檢查頁面上是否存在某個元素。
我已經看到這個WebDriver: check if an element exists?問題,但我想知道爲什麼不簡單地應用findElements().isEmpty方法?
我認爲它會做同樣的工作。使用WebDriver findElements()檢查元素的存在isEmpty方法

UPD現在我看到findElements().isEmpty完美的作品,所以我只是想知道爲什麼要尋找其他的,比較複雜的方式,同時有一個簡單的方法是什麼?

+0

接受的答案表明'driver.findElements(By.id( 「...」)).size()!= 0'這是完全一樣的'!driver.findElements(By.id( 「...」)).isEmpty()'。你又問了什麼? –

+0

如果是這樣,爲什麼沒有人提到'isEmpty'方法(至少我沒有看到),只有'size'方法用於那個?此外,我試圖應用'isEmpty'方法,但到目前爲止,我發現它並不像我想的那樣工作。 – Eliyahu

+2

他們在回答下面的評論中提到了它。所以,是的,使用'isEmpty()'而不是'size()== 0'通常是更好的做法,靜態分析工具甚至會指出這是一個警告。你說得對,'isEmpty()'是更好的選擇。儘管如此,它還是做了同樣的事情。 –

回答

1

isEmpty()實際上來自Java List類,因爲findElements()返回WebElements的List

+1

...這正是爲什麼'driver.findElements(selector).isEmpty()'應該是首選的。它更短,避免使用流量控制異常,這是一個很好的整體實踐。 –

0

findElements返回匹配給定選擇器的所有元素的列表。所以你在這裏使用建立在isEmpty()方法中的java列表。

+2

檢查能見度!=檢查是否存在。 – aholt

+0

是的,是的。我沒有說這是,但它沒有問 – Cathal

+1

原來的問題沒有說任何關於檢查能見度。它在詢問是否存在。只是澄清。用你的例子,如果它不存在,就會拋出一個異常。 – aholt

0
public static WebElement findElement(WebDriver driver, By selector, long timeOutInSeconds) { 
    WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds); 
    wait.until(ExpectedConditions.presenceOfElementLocated(selector)); 
    return findElement(driver, selector); 
    } 


    public static WebElement findElementSafe(WebDriver driver, By selector, long timeOutInSeconds) { 
    try { 
     return findElement(driver, selector, timeOutInSeconds); 
    } catch (TimeoutException e) { 
     return null; 
    } 
    } 
+0

對於Google Guava和/或Java 8,您的'findElementSafe()'方法可能更適合使用'Optional'類作爲返回值而不是潛在的'null'。 –

+2

無論如何,當您爲「如何檢查元素是否存在」添加了一個相當好的答案時,您沒有回答OP的問題_「那麼,空是用於什麼以及如何操作的?」_ –

0

下面的代碼工作正常,在webdriver的

if(driver.findElements(By.xpath(xpath)).size()!=0) 
{ 
    ... 
} 

的情況下,但是如果我們用WebElementFacade我們可以寫一些東西像下面這是相當容易得多。

@FindBy(xpath = "xpathvalue") 
private WebElementFacade element; 

if(element.isPresent()) 
{ 
    ... 
} 
+0

您爲什麼認爲這種方法的效果比最簡單的findElements()。isEmpty,正如我在主題中提到的那樣? – Eliyahu

+0

如果我們使用WebElementFacade,我們不必獲取調用findElements()方法所需的驅動程序。 – Seshadri

+0

好吧,但我甚至不知道WebElementFacade是什麼。我會在稍後閱讀。謝謝! – Eliyahu

相關問題