我使用的是Robot Framework + Selenium(Java版),我需要使用某种javascript来测试每隔几秒钟不断更改图像的背景。
它基本上是四个< div>包含添加了类的图像的元素" active"每隔一两秒钟。因此,如果显示第一个背景,那么HTML显示如下:
>>> unix_lines = re.compile(r'^(.*[^\r\n]\n|\n)', re.MULTILINE)
>>> dos_lines = re.compile(r'^.*\r\n', re.MULTILINE)
>>> unix_lines.findall(dos)
[]
>>> unix_lines.findall(unix)
['Hello\n', 'World\n', '\n']
>>> dos_lines.findall(unix)
[]
>>> dos_lines.findall(dos)
['Hello\r\n', 'World\r\n', '\r\n']
一秒钟之后会发生这样的事情:
<div class="background first active">
<div class="background second">
<div class="background third">
<div class="background fourth">
所以我需要做的就是确定这个&#34;活跃&#34;类被应用于&lt; div>之后&lt; div>在一个循环中。有办法吗?
答案 0 :(得分:1)
您不需要Robot框架来执行此操作。你可以用Selenium来做到这一点。这是你可以做到这一点的一种方式......
By first = By.cssSelector("div.background.first.active");
By second = By.cssSelector("div.background.second.active");
By third = By.cssSelector("div.background.third.active");
By fourth = By.cssSelector("div.background.fourth.active");
waitForCycle(first);
waitForCycle(second);
waitForCycle(third);
waitForCycle(fourth);
和支持功能
public static void waitForCycle(By locator)
{
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
}
您可以在开始时定义定位器中的活动状态。然后,您可以一次调用一个辅助函数。辅助函数等待找到的元素可见,然后不可见。
这应首先检测到变为活动然后不活动。然后第二个变得活跃,然后不活跃......等等。
如果你得到TimeoutException
,你知道其中一个周期失败了。如果你想要一个失败的“漂亮”消息,你可以在每个消息周围添加一个try-catch
,但是异常中的定位器应该明白哪一个正在等待。