加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如果Ajax没有返回任何元素,那么Selenium Ajax会等待吗?

发布时间:2020-12-16 02:53:15 所属栏目:百科 来源:网络整理
导读:我正在向某些输入字段发送一些密钥.当焦点从此元素中删除时,如果我输入的值有效,则会向服务器发送ajax请求. 如果是,则没有任何反应,如果没有出现错误消息. 有几个这样的领域. 当我说: driver.findElementById(firstId).sendKeys(firstValue);driver.findEle
我正在向某些输入字段发送一些密钥.当焦点从此元素中删除时,如果我输入的值有效,则会向服务器发送ajax请求.
如果是,则没有任何反应,如果没有出现错误消息.
有几个这样的领域.

当我说:

driver.findElementById(firstId).sendKeys(firstValue);
driver.findElementById(secondId).sendKeys(secondValue);

第二个值不会被发送到第二个元素,因为同时会有非常短的ajax请求.但由于值正常(firstValue),它不会显示任何文本或其他任何内容.

我如何告诉Selenium等待这个ajax完成?我不想使用Thread.sleep.

解决方法

Selenium不会等待AJAX??加载.它会自动等待页面加载.要等待AJAX??类型加载,您必须使用隐式和显式等待.

您可以使用隐式等待和显式等待来等待特定的Web元素,直到它出现在页面中.您可以定义的等待时间取决于应用程序.

显式等待:

显式等待是您定义的代码,用于在进一步执行代码之前等待某个条件发生.如果达到的条件将终止等待并继续进一步的步骤.

码:

WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(strEdit)));

要么

WebElement myDynamicElement = (new WebDriverWait(driver,30))
.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("myDynamicElement"));
}});

在抛出TimeoutException之前等待最多30秒,或者如果它发现元素将在0-30秒内返回它. WebDriverWait默认情况下每500毫秒调用一次ExpectedCondition,直到它成功返回.对于所有其他ExpectedCondition类型,ExpectedCondition类型的布尔返回true或非null返回值成功返回.

您可以根据应用程序的需要使用ExpectedConditions类.

隐含等待:

隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果它们不是立即可用)时将DOM轮询一段时间

码:

driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);

要记住的一件事是,一旦设置了隐式等待 – 它将保留WebDriver对象实例的生命周期

有关更多信息,请使用此链接http://seleniumhq.org/docs/04_webdriver_advanced.jsp

您可以在加载AJAX期间使用这些等待.

我希望这会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读