selenium网络驱动程序等待innerText的计时器
本文关键字:计时器 innerText 等待 网络 驱动程序 selenium | 更新日期: 2023-09-27 18:30:11
嗨,我在编写这段代码时遇到了问题,需要帮助。html代码是
<span id="banner">Rolling in 10.00...</span>
这个"在10.00中滚动…"是一个innerText,10.00是一个计时器,意味着它将一直运行到0。我有兴趣尝试在计时器为20.00时运行代码。示例
<span id="banner">Rolling in 20.00...</span>
但是我遇到了很多麻烦。这是一些可以工作但有套接字异常错误的代码(http://puu.sh/mubug/c33d8501bf.png)
public void waitroller2()
{
Console.WriteLine("start roller timer");
WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromSeconds(1000));
Stopwatch watch = new Stopwatch();
IWebElement banner = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("banner")));
watch.Start();
do
{
if (banner.Text.Equals("Rolling in 20.00..."))
{
Console.WriteLine("roller ended");
return;
}
} while (watch.Elapsed.Seconds < 1000);
throw new NoSuchElementException();
}
这种方法根本不适用于
public void waitroller1()
{
Console.WriteLine("waitroller");
new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromMinutes(1.5)).Until(ExpectedConditions.TextToBePresentInElement(rolling,"Rolling in 20.00..."));
Console.WriteLine("roller end");
}
我认为主要的问题是当我长时间使用这个webdriverwait时,它不工作了,出现了套接字问题。我需要帮助,任何人都可以教我怎么做
试试这个。
try
{
string timeToWait = new String(driver.FindElement(By.Id("banner")).Text.ToCharArray().Where(c => Char.IsDigit(c)).ToArray()).Substring(0,2);
int ttw = Convert.ToInt32(timeToWait);
System.Threading.Thread.Sleep(ttw * 1000);
}
catch(Exception ex)
{}
这正是您所需要的。
IWebElement banner = driver.FindElement(By.Id("banner")).Text;
bool status = false;
int tryTimes = 15;
do
{
if (banner.Text.Equals("Rolling in 20.00..."))
{
Console.WriteLine("roller ended");
status = true;
}
else
{
System.Threading.Thread.Sleep(1000);
banner = driver.FindElement(By.Id("banner")).Text;
tryTimes--;
}
} while (!status && tryTimes > 0);