Веб-драйвер Selenium ожидает фоновых XHR-запросов - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь автоматизировать что-то в Salesforce с помощью Selenium. Как мне дождаться отображения результатов поиска, как на скриншоте? Метод-1 или Метод-2?

enter image description here

//Method-1
public void waitForPageLoadXHR(WebDriver driver) {
    new WebDriverWait(driver, 15).until(
            driver1 -> ((JavascriptExecutor) driver1).executeScript("return document.readyState").equals("complete"));
}

//Method-2
    public void waitForPageLoadXHR(WebDriver driver) {
        new WebDriverWait(driver, 15).until(
                driver1 -> ((JavascriptExecutor) driver1).executeScript("return jQuery.active == 0"));
    }

Обновление: Вот представление HTML. Извините, я не могу опубликовать фактический HTML из-за проблем с соответствием. - это мое текстовое поле, а результаты поиска -

s '. отображаются динамически при вводе текста.

enter image description here

1 Ответ

0 голосов
/ 01 апреля 2020

(1) Я видел, что вы ищете аккаунт и отправляете строку в поле глобального поиска на странице Salesforce. Мое первое предложение здесь - «Не копируйте и не вставляйте» свою учетную запись (или любое имя) прямо здесь. Salesforce Lighting - это тяжелый сайт, занимающий больше времени, чем обычный сайт. Итак, что вы можете сделать, это - дать символ за символом с небольшим ожиданием. Я знаю этот трюк, который вам может не понравиться, но он работает для меня на 100% - см. Ниже код:

for (int i = 0; i < value.length(); i++){
   char character = value.charAt(i);
    String inputCharacterText = new  StringBuilder().append(character).toString();                  
    driver.findElement(webElement).sendKeys(inputCharacterText);
    Thread.sleep(50);
    }  

(2) Решение основного вопроса:

TestWait.waitForElementToBeVisible (driver, PageClass .searchAccount (driver));

это ваш WebElement: (Поскольку вы ищете конкретную c учетную запись, попробуйте создать свой xpath, используя заголовок, используя пользовательский текст - пример xpath "// * [@ title = 'AccountName'] ")

public static By  searchAccount= By.xpath("You XPATH go here ");

public static By searchAccount(WebDriver driver) {

    return searchAccount ;
}

Пожалуйста, используйте метод ожидания, упомянутый ниже, он прекрасно работает для меня:

класс равен" TestWait ", и вы определили метод ниже в классе

publi c stati c логический waitForElementToBeVisible (драйвер WebDriver, по ожидаемому элементу) {

    boolean webElement = false;
    logger.info("Executing waitForElementToBeVisible for page element");
    try {
        logger.info("Waiting for web element " + expectedElement + " with fluent wait");

          driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
          Wait<WebDriver> wait = new
          FluentWait<WebDriver>(driver)
          .withTimeout(Duration.ofSeconds(45))
          .pollingEvery(Duration.ofMillis(200))
          .ignoring(org.openqa.selenium.NoSuchElementException.class,org.openqa.
          selenium.StaleElementReferenceException.class)
          .ignoring(org.openqa.selenium.ElementNotVisibleException.class);

          wait.until(ExpectedConditions.visibilityOfElementLocated(expectedElement));    

        webElement = true;
    } catch (Exception e) {
        logger.error(expectedElement + " : Not found the element on Page");
        webElement = false;
        Assert.fail("WebElement is not visible");
    } finally {
        driver.manage().timeouts().implicitlyWait(TestConstant.ImplicitWaitTime, TimeUnit.SECONDS);
    }
    return webElement;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...