繁体   English   中英

如何等待项目完成加载?

[英]How to wait for an item to finish loading?

好吧,我正在用 Selenium 用 Angular 和 Java 设计的页面上进行测试。 当对数据库进行查询或页面在其代码中加载时,会出现:

 <span _ngcontent-c0 class = "loading"> </span>

当它完成加载时,它会变成这样:

 <span _ngcontent-c0 class = "loading" hidden> </span>

我的问题是这个“加载”拦截了我在测试中发送的点击:

org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <a class="white-text" id="aaidEntidadBancaria" title="Apply"> ... </a> is not clickable at point (460, 502) . Other element would receive the click: <span _ngcontent-c0 = "" class = "loading"> </span>

我可以使用什么样的等待? 我已经尝试过 invisibilityOfElementLocated (locator) 但它没有用......

您需要等待加载器不可见隐藏,从而为invisibilityOfElementLocated()引入WebDriverWait ,您可以使用以下任一定位器策略

  • cssSelector

     new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("span.loading)));
  • xpath

     new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//span[@class='loading'])));

您可以在Selenium invisibilityOf(element) method throwing NoSuchElementException + WebDriverWait.ignoring(NoSuchElementException.class) is not working 中找到相关讨论


一旦加载器不可见隐藏,您可以为elementToBeClickable()引入WebDriverWait并调用click()如下:

  • cssSelector

     new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("span.loading))); new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.white-text#aaidEntidadBancaria[title='Apply']"))).click();
  • xpath

     new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//span[@class='loading']))); new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='white-text' and @id='aaidEntidadBancaria'][@title='Apply']"))).click();

您可以在元素中找到相关讨论MyElement is not clickable at point (x, y)... 其他元素会收到点击

如果invisibility_of_element_located不适合您,您可以尝试使用 Javascript 单击来解决ClickIntercepted问题:

# locate clickable element
clickable_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//a[@title='Apply']")))

# click with Javascript
driver.execute_script("arguments[0].click();", clickable_element)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM