2016-08-05 6 views
0

Элемент, что я говорю о том, на следующие:Лучший способ получить текст этого элемента селена

<tbody> 
    <tr id="tableUsers_0__TR" class="active" name="Tr_tableUsers[0]_Selected"> 
     <td> 
     <input id="tableUsers_0__POSName" type="hidden" value="Indian" name="tableUsers[0].POSName"/> 
     Indian 
     </td> 

Решение, которое я предлагаю это: Первый шаг является Расположить Element By Xath:

string xpath = ".//*[@id='tableUsers_0__PDVCode']/.."; 

Затем получить текст с помощью метода:

driver.FindElement(By.XPath(xpath)).Text 

Это самый лучший способ? или нет? Есть еще один способ, который лучше этого? лучше, чем использование Xpath.

+1

Это не сайт, на котором можно получить мнения! – MatejMecka

ответ

1

1) Вы можете использовать селектор By.Id("your id").

2) Для некоторых элементов его гораздо полезнее использовать IWebElement.GetAttribute("text") чем IWebElement.Text

+0

Проблема в том, что текст находится под шайбой у этого ничего нет, как локатор (ni Id ni name ....). Вот почему я пытаюсь найти этот текст, используя вход для балласта, чем родительский балласт ?! – user3446229

+0

@ user3446229 Я думаю, вы либо используете более точный xpath с/td в конце, либо используете .Text. –

1

Да, вот лучший способ, чем Xpath использовать By.id как: -

driver.FindElement(By.Id("tableUsers_0__TR")).Text 

Или используйте By.CssSelector: -

driver.FindElement(By.CssSelector("tr#tableUsers_0__TR td")).Text 

Примечание: - Всегда дает последний приоритет в Xpath, потому что он намного медленнее, чем другие локаторы, в вашем случае, если элемент имеет атрибут id, чем лучший способ использования By.Id() другой wis e попытайтесь найти элемент, используя другие локаторы, такие как By.Name(), By.ClassName(), By.CssSelector() и т. д. Если это возможно.

+0

Проблема заключается в том, что текст находится под балластом ** ** у этого ничего нет как локатор (ni Id ni name ....). Вот почему я пытаюсь найти этот текст, используя вход для балласта, чем родительский балласт ?! – user3446229

+0

@ user3446229 вы правы, но, находя вход, вы не можете получить текст во время нахождения tr или td, вы можете получить текст в предоставленном HTML, потому что он находится внутри узлов tr и td. –

+0

Если после ввода текст будет представлен любым HTML-тег, то defenetely вы не можете получить с использованием ввода, следующего за сестриком, но в вашем случае это просто текст, который не присутствует ни одного тега, но он присутствует тег tr и td .. :) –

2

Javascript Исполнитель также может быть использован для возврата текста элемента. После сценарий может быть использован:

document.getElementById('<your id>').innerText 

или

document.getElementById('<your id>').textContent 

Чтобы получить это, объект JavascriptExecutor должен быть создан первым. См следующий сценарий:

IWebDriver driver; // driver object is created in the code somewhere 
IJavaScriptExecutor js = (IJavaScriptExecutor)driver; 
string valueFromId = (string)js.ExecuteScript("return document.getElementById('<your id>').innerText"); 

Вы также можете проверить этот текст, выполнив команду Javacript (document.ge ...) в консоли браузера.

Смежные вопросы