Если вам нужно только проверить текст, то нет особой необходимости делать это специально для Selenium.Итак, вот решение, которое делает это через Jquery.
Обратите внимание, driver.Manage().Timeouts().ImplicitWait
нужно устанавливать только один раз, если только вы не меняете значение на что-то другое.
Также обратите внимание, мойпример требует больше чем неявное ожидание между циклами.
using OpenQA.Selenium.Support.Extensions;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
do
{
vehicleTitle = driver.ExecuteJavascript<string>("return $('#vehicleRateSummary > tbody > tr:nth-child(1) > th').text()");
driverTitle = driver.ExecuteJavascript<string>("return $('#vehicleRateSummary > tbody > tr:nth-child(3) > th').text()");
System.Threading.Thread.Sleep(100); //Milliseconds
}
while (vehicleTitle == "");
Теперь я не могу гарантировать, что это работает без страницы, чтобы протестировать ее самостоятельно, но вы можете убедиться, что это работает, перейдя в консоль разработчика браузера,и вставив необработанный JQuery в нужное время, вы хотите извлечь текст $('#vehicleRateSummary > tbody > tr:nth-child(1) > th').text()
Теперь, если это не сработает, дайте мне знать.В частности, если ваша страница не использует JQuery, мы можем решить что-то еще.Если это не сработает, для нас может оказаться полезным увидеть html в таблице после того, как он обновится со значениями, которые вы ищете (таблица vehicleRateSummary).
Кроме того, важное примечание: th обычно является ячейкой строки заголовка таблицы.Принимая во внимание, что td обычно является ячейкой строки тела.Мы уверены, что это то, что мы должны искать здесь?Особый случай?Просто убедившись, что мы действительно ищем правильные элементы.
Теперь вот решение, которое можно использовать повсюду в вашем проекте, которое перепишет приведенный выше код (если вам это нравится):
//Goes in some static tools class. Must be a static class.
private static void WaitUntil(this IWebDriver driver, Func<bool> Condition, float timeout)
{
float timer = timeout;
while (!Condition.Invoke() && timer > 0f)
{
System.Threading.Thread.Sleep(500);
timer -= 0.5f;
}
System.Threading.Thread.Sleep(500);
}
//And your new code
driver.WaitUntil(() => driver.ExecuteJavascript<bool>("return $('#vehicleRateSummary > tbody > tr:nth-child(1) > th').text().length > 0"));
driver.WaitUntil(() => driver.ExecuteJavascript<bool>("return $('#vehicleRateSummary > tbody > tr:nth-child(3) > th').text().length > 0"));