3 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
請(qǐng)使用下面的代碼片段。如果沒有找到匹配的元素而不是異常,findElements 將返回一個(gè)空列表,但是我已經(jīng)完成了異常處理。
import java.awt.AWTException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class Testing {
public static WebDriver driver;
@Test
public void test() throws InterruptedException, AWTException {
WebDriver driver = new ChromeDriver();
driver.get("http://www.example.com");
Boolean isPresent = driver.findElements(By.xpath("//span[@class='chat_message']")).size() > 0;
try {
if (isPresent == true) {
System.out.println("New Login is added to my page");
} else {
System.out.println("New Login is not added to my page");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果至少找到一個(gè)元素,則返回 true,如果不存在則返回 false。
如果它符合您的期望,請(qǐng)接受答案并進(jìn)行投票。提前致謝。

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)您提到您需要捕獲元素時(shí),用例歸結(jié)為使用ExpectedConditions誘導(dǎo)WebDriverWait,以便您可以提取任何元素屬性:visibilityOfElementLocated(By locator)
內(nèi)部HTML
類屬性
外層HTML
在這些情況下,最好的選擇是創(chuàng)建如下函數(shù):
public void getElementAttribute()
{
try {
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='chat_message']"))).getAttribute("innerHTML"));
}
catch(Exception TimeoutException) {
System.out.println("Element no found");
}
}
現(xiàn)在,您可以從程序中的任何位置調(diào)用此函數(shù)來檢查元素的可見性,如下所示:
getElementAttribute();
筆記:
由于元素是動(dòng)態(tài)元素,您需要誘導(dǎo)WebDriverWait。
由于您需要捕獲元素visibilityOfElementLocated非常適合。
有時(shí)您需要將代碼行包裝在一個(gè)try-catch {}塊中,并在出現(xiàn)異常的情況下優(yōu)雅地處理并TimeoutException繼續(xù)您的下一步。

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您知道該元素的定位器 - 有一個(gè)“while”循環(huán),其中包含 afindElement()
并捕獲NoSuchElementException
. 如果該元素不存在,您將捕獲異常,暫停一段時(shí)間(盡管如此sleep
),然后開始一個(gè)新的循環(huán)周期。如果沒有拋出異常,則元素存在;將您的 while 控制變量更改為true
,然后繼續(xù)。
我建議有一個(gè)計(jì)數(shù)器循環(huán)運(yùn)行了多少次,如果它達(dá)到某個(gè)閾值 - 打破它,出現(xiàn)錯(cuò)誤/異常 - 這樣你就不會(huì)陷入無限循環(huán)。
恭喜 - 您剛剛WebDriverWait
使用presenceOfElementLocated()
ExpectedConditions 實(shí)施。您可以使用它(香草硒版本),或堅(jiān)持使用本土解決方案,這將為您提供更精細(xì)的控制和決策樹 - 但需要更多編碼。
如果你沒有具體的元素,只是想看看頁面本身什么時(shí)候發(fā)生變化,算法是一樣的,但是:在開始循環(huán)之前,先獲取頁面源。在它的體內(nèi),再次得到它;如果兩者不同,那就是你的突破條件。
這種方法雖然會(huì)受到頁面中最輕微的變化的影響。
添加回答
舉報(bào)