我正在嘗試編寫一個通用Web驅動程序等待等待元素可點擊。但是我發現了網絡驅動程序等待寫入特定於By.id或By.name的等待。如何在Selenium中編寫通用Web驅動程序等待
假設下面是兩個WebElements
public WebElement accountNew() {
WebElement accountNew = driver.findElement(By.xpath("//input[@title='New']"));
waitForElementtobeClickable(accountNew);
return accountNew;
}
public WebElement accountName() {
WebElement accountName = driver.findElement(By.id("acc2"));
waitForElementtobeClickable(accountName);
return accountName;
}
下面是廣義waitofrelementtobeclickable。
public static void waitForElementtobeClickable(WebElement element) {
try {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(element));
System.out.println("Got the element to be clickable within 10 seconds" + element);
} catch (Exception e) {
WebDriverWait wait1 = new WebDriverWait(driver, 20);
wait1.until(ExpectedConditions.elementToBeClickable(element));
System.out.println("Got the element to be clickable within 20 seconds" + element);
e.printStackTrace();
}
}
但它似乎沒有工作。任何關於如何爲xpath,或id,或class或Css寫一個通用代碼的建議都可以寫出來?
做什麼你的意思是「似乎不起作用」?你有錯誤嗎? – Guy
不,沒有錯誤,但對waitforelementclickable的調用只是繞過,並沒有通過實際等待10或20秒的過程。示例:登錄到Salesforce應用程序後,我希望頂部面板中的userName是可點擊的,以便我可以點擊它,然後單擊註銷。但是登錄後頁面仍然正在加載,程序只是終止,說找不到元素。但是如果我給出20秒的明確睡眠,它就會起作用。所以xpath/locator不是問題。 – Ronnie