2016-01-21 70 views
0

基本上我需要做的是,如果特定的元素存在,提取數據行的值轉換成基於這是該行的變量。提取數據行的值到變量,如果元素存在

這是我至今。你可以從下面和上面的代碼中看到,我需要檢查文本Automation是否存在(我在上面做過)。然後,我需要將數據行值提取到一個變量中。

<td id="browse_row28_col0" style="text-align:left;" class="browseDataCell column0 " data-row="28" data-column="0" onmousedown="event.preventDefault()"> 
    <div style="width:200px;" class="dontWrapData ">Automation</div> 
</td> 

我在遇到問題的事情是我不知道如何從提取數據,因爲數據行的值將永遠是相同的。我不知道如何提取基於div「自動化」的TD標籤的數據行值。

如果我做了一份糟糕的工作解釋我需要幫助,我表示歉意。如果您有任何問題,請不要問。

回答

0

您可以找到<td>元素,並使用獲得的屬性來提取數據行

string dataRow = drive.FindElement(By.Id("browse_row28_col0")).GetAttribute("data-row"); 

if(drive.FindElement(By.XPath("//div[contains(., 'Automation')]")).Displayed)如果元素存在,你不檢查,但如果顯示的元素。

要檢查,如果該元素存在,您可以設置隱性等待

drive.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 

並檢查該元素是可見的,你應該使用明確的等待

WebDriverWait wait = new WebDriverWait(drive, TimeSpan.FromSeconds(10)); 
WebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("[class*='dontWrapData']"))); 

您還可以使用顯式的等待並存

wait.Until(ExpectedConditions.ElementExists(By.CssSelector("[class*='dontWrapData']"))); 

CssSelector將搜索類attribut女巫包含「dontWrapData」。 由於html class="dontWrapData "中的空格,我沒有使用By.ClassName

該等待將等待最多10秒,以使該元素存在/可見。

編輯

要找到「自動化」的文本數據行,你可以把所有行的列表,並與文字

string dataRow = string.Empty; 
IList<IWebElement> rows = drive.FindElements(By.CssSelector("[id*='browse_row']")); 
foreach (IWebElement row in rows) 
{ 
    IWebElement div = row.findElement(By.CssSelector("[class*='dontWrapData']")); 
    if (!string.IsNullOrEmpty(div.Text) && div.Text.Equals("Automation")) 
    { 
     dataRow = row.GetAttribute("data-row"); 
    } 
} 

你可以找到所有搜索子元素<td>標籤由共同的部分ID,並檢查每一個,如果他有「自動化」文本的子元素。如果是這樣,你可以提取「數據行」。

+0

對不起,但這不起作用。它沒有的原因是因爲我不能通過ID隱式搜索。因爲ID將根據「自動化」所在的行而變化。標識可以是browse_row1_col0,也可以是browse_row924_col0。 這就是爲什麼我需要找到自動化所在的行。 – Travis

+0

@Travis我在我的答案的編輯下爲該方案添加了解決方案。 – Guy