【发布时间】:2013-06-23 09:32:55
【问题描述】:
我正在为网页编写一个自动化测试用例。这是我的场景。 我必须在 html 表单中单击并键入各种 Web 元素。但是,有时在文本字段上键入时,会出现一个 ajax 加载图像,模糊了我想要与之交互的所有元素。所以,我在点击下面的实际元素之前使用 web-driver 等待,
WebdriverWait innerwait=new WebDriverWait(driver,30);
innerwait.until(ExpectedConditions.elementToBeClickable(By.xpath(fieldID)));
driver.findelement(By.xpath(fieldID)).click();
但是等待函数会返回元素,即使它被另一个图像迷雾并且不可点击。但是 click() 会抛出异常
Element is not clickable at point (586.5, 278).
Other element would receive the click: <div>Loading image</div>
在与任何元素交互之前,我是否必须每次检查加载图像是否出现?(我无法预测加载图像何时会出现并使所有元素雾化。) 有没有有效的方法来处理这个? 目前我正在使用以下函数等待加载图像消失,
public void wait_for_ajax_loading() throws Exception
{
try{
Thread.sleep(2000);
if(selenium.isElementPresent("id=loadingPanel"))
while(selenium.isElementPresent("id=loadingPanel")&&selenium.isVisible("id=loadingPanel"))//wait till the loading screen disappears
{
Thread.sleep(2000);
System.out.println("Loading....");
}}
catch(Exception e){
Logger.logPrint("Exception in wait_for_ajax_loading() "+e);
Logger.failedReport(report, e);
driver.quit();
System.exit(0);
}
}
但是我不知道具体什么时候调用上面的函数,在错误的时间调用会失败。有没有什么有效的方法来检查一个元素是否真的可以点击?还是存在加载图像?
谢谢..
【问题讨论】:
-
您是否针对不同的浏览器运行此测试?如果是这样,您是否对所有这些都得到相同的例外?如果您为 Chrome 运行它,异常可能与您的代码无关,而是 Chrome 驱动程序的“click()”方法的错误。
-
@Sergio 我这样做了,这不是浏览器驱动程序错误,基于来自这个问题 stackoverflow.com/questions/9878478/… 的 cmets 以及我了解到的 webdriver wait 返回元素,即使它是不可点击,即如果有多个图层遮挡它。那么有没有等待元素真正可点击的等待方法?
标签: java selenium webdriver selenium-webdriver