[英]fastest way to locate elements selenium+java
在測試期間,我需要檢查我的網站上是否有無效的工具提示和其他錯誤消息,以確保一切正常。 問題是硒似乎要花很長時間才能找到這些元素,並且它們被設置在計時器上,因此它們有時有時間在硒找到它們之前消失,我們正在談論一個3秒的計時器。
現在我發現它們是這樣的:
List<WebElement> error = driver.findElements(By.cssSelector("div.alert .error"));
if (error.size() == 0) {return true;}
else {return false;}
這將查找給定時間在網站上顯示的所有錯誤消息,有時這會導致跟上進度。 工具提示是使用javascript創建和銷毀的,因此不會隱藏然后顯示。 有什么想法嗎?
編輯:
由於該網站是單頁頁面,因此找到合適的頁面要花費大量的元素,但是當我尋找一個實際可見的項目時它很快,因此可以最大程度地減少搜索量,我這樣做是:
WebElement messages = driver.findElement(By.id("the-div-the-message-is-created-in"));
List<WebElement> error = messages.findElements(By.cssSelector("div.alert .error"));
if (error.size() == 0) {return true;}
else {return false;}
盡管它似乎並沒有更快地驗證元素的存在。
我在我建立的每個框架中都放了一些東西,這非常有效。.這是從此處找到的框架的摘錄。 您可以在這里下載 ...
在對對象執行任何操作之前,我先實現了一種偽等待類型的方法。 自己嘗試。 非常有效。
這些是AutomationTest類的方法
/**
* Checks if the element is present or not.<br>
* @param by
* @return <i>this method is not meant to be used fluently.</i><br><br.
* Returns <code>true</code> if the element is present. and <code>false</code> if it's not.
*/
public boolean isPresent(By by) {
if (driver.findElements(by).size() > 0) return true;
return false;
}
/**
* Private method that acts as an arbiter of implicit timeouts of sorts.. sort of like a Wait For Ajax method.
*/
private WebElement waitForElement(By by) {
int attempts = 0;
int size = driver.findElements(by).size();
while (size == 0) {
size = driver.findElements(by).size();
if (attempts == MAX_ATTEMPTS) fail(String.format("Could not find %s after %d seconds",
by.toString(),
MAX_ATTEMPTS));
attempts++;
try {
Thread.sleep(1000); // sleep for 1 second.
} catch (Exception x) {
fail("Failed due to an exception during Thread.sleep!");
x.printStackTrace();
}
}
if (size > 0) System.err.println("WARN: There are more than 1 " + by.toString() + " 's!");
return driver.findElement(by);
}
自己組合這些方法,就可以了。
在性能方面,我不能對您這么強調。. 使用CSS 。 它更快,更干凈。 你自己看。
考慮以下,
<div id="something">
<div class="someClass">
<a href='http://google.com/search?'>Search Google</a>
</div>
</div>
讓我們找到<a>
。
CSS:
div#something div.someClass > a[href^='http://google']
XPATH:
//div[@id='something']/div[contains(@class, 'someClass')]/a[starts-with(@href, 'http://google')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.