我有一張可以添加元素的表格,我需要能夠爲Selenium自動化測試找到特定的表格行。我不關心前兩行 - 僅僅是那些以「something」開頭的類名。我試圖用這些定位器來選擇第一個具有以「something」開頭的類名的表格行。硒會拋出異常,試圖與這些元素相互作用。我在做什麼錯了....用於在表格中定位特定行的CSS選擇器:關於第n型/第n子型的困惑
div.elements table.table tbody tr.something:nth-child(1)
div.elements table.table tbody tr.something:nth-of-type(1)
<div class="elements">
<table class="table">
<tbody>
<tr class="no-data hide">
<tr class="no-data hide"></tr>
<tr class="something something_fa4743bd-0ada-4c74-bae0-351ddc322f7d">
<tr class="something something_e357d71c-559f-4ea1-bc7d-489537ab083e">
<tr class="something something_71d6b3f7-df45-4283-a669-bfbcfccd7d0f">
</tbody>
</table>
</div>
這裏是我遇到問題的方法。所以基本上,這是一個數據輸入表單。如果你想添加另一個條目,你點擊一個按鈕,會出現一個新行。該方法返回新條目的行號,以便可以進一步與新行進行交互。
private static final String somethingEntryRowCss = "div.scrolling-table table.table tbody tr.hostname";
public final int clickAddSomethingButton() {
int count = countEntries() + 1;
addSomethingButton.click();
ComponentLoader.waitForElementVisible(driver,
By.cssSelector(somethingEntryRowCss + ":nth-child(" + count
+")"));
return count;
}
這裏是ComponentLoader.waitForElementVisible(driver, By)
方法檢查是否新行是點擊按鈕後可見。這是超時在等待元素可見:
public static final WebElement waitForElementVisible(final WebDriver driver,
final By locator) {
try {
Wait<WebDriver> wait = setWait(driver);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
break;
} catch(NoSuchElementException nsee) {
logger.trace("NoSuchElementException. Element is not visible.);
} catch(TimeoutException toe) {
logger.trace("TimeoutException. Element is not visible.);
}
return driver.findElement(locator);
}
那麼**拋出什麼**異常? – Arran 2014-08-27 16:32:25
這是一個輔助方法拋出的超時異常。我已更新我的問題以添加更多信息。 – Selena 2014-08-27 18:16:20
實際上,如果我嘗試在超時異常的catch塊內獲取元素的類名,我得到一個NoSuchElementException異常。所以,問題實質上是定位器沒有這樣的元素。 – Selena 2014-08-27 18:44:05