Подождите, пока в раскрывающемся списке не отобразится конкретный текст - селен - PullRequest
1 голос
/ 04 октября 2019

У меня есть проблема, которую я пытаюсь решить. У меня есть страница с 4 выпадающими. и я хочу выбрать значение в каждом из них. Так как сайт угловой, я использовал операцию, чтобы открыть выпадающий список, а другой - выбрать значение. проблема в том, что после нажатия на раскрывающийся список, все значения находятся под одним и тем же xpath. (значения, сгенерированные после нажатия раскрывающегося списка)

Пример раскрывающегося списка 1 19 значений: enter image description here Нажатие раскрывающегося списка 2 32 значения с одинаковым xpath enter image description here

Проблема в том, что после заполнения раскрывающегося списка 1 и перехода к раскрывающемуся списку 2 xpath остается тем же, но значения меняются недостаточно быстро, поэтому я нажимаю раскрывающийся список 2, а селен пытается найти значения, но видит значения первого раскрывающегося списка. ,Как я могу сделать селен (не с потоком сна), чтобы ждать, пока мое значение не существует в раскрывающемся списке.

Это мой код для поиска значения в списке webelements (имеется в виду раскрывающийся список)

   public static void clickOptionInListByXpath(String Xpath, String clickedValue)
    {
        Integer flag = 1;
        WebElement option2;
        WebDriver driver2 = WebDriverMgr.getDriver();
        List<WebElement> dropdownOptions = driver2.findElements(By.xpath(Xpath));
       // for (WebElement option : dropdownOptions  )
        for(int i= 0;i<dropdownOptions.size() && flag == 1;i++)
        {
            option2 = dropdownOptions.get(i);
            System.out.println("\n Option is: " + option2.getText());
            if(option2.getText().equals(clickedValue))
            {

                option2.click();
                flag = 0;


            }
        }
    }  

Это мой код ожидания текста, который будет отображаться в одном элементе xpath с 1 результатом, а не в списке (xpath для более чем 1 элемента)

 public static void getWebElementByXpathWithWaitTextToBeSeen(String xpath,String text)


      {
            WebDriver driver2 = WebDriverMgr.getDriver();
          //  driver2.manage().timeouts().implicitlyWait(IMPLICIT_WAITE, TimeUnit.SECONDS);
            WebDriverWait wait = new WebDriverWait(driver2,EXPLICIT_WAITE);
            wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpath),text));
        }

Как я могу ждать, пока текст не появится всписок веб-элементов? и это будет обновлять список каждый раз? PS Я использую сон, он будет работать, однако я хочу код без жестко закодированных пожеланий сна

1 Ответ

0 голосов
/ 04 октября 2019

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

  1. У вас есть 2 идентичных веб-элемента на странице, которые представляют 2 раскрывающихся списка.
  2. Каждый из них может генерировать N веб-элементов, которые одинаковы по объему всего документа.

Проблема : когда вы получаете все каплиопций, нет способа определить, из какого они раскрывающегося списка.


На основании заданного объема информации я могу предложить вам сначала найти оба раскрывающихся элемента и сохранитьссылки на них, пока вы не сделали все свои тесты с ними.

В этом случае вы сможете найти не все опции, а опции, которые являются потомками определенного раскрывающегося списка, например, используя https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#visibilityOfNestedElementsLocatedBy-org.openqa.selenium.WebElement-org.openqa.selenium.By-


Подводя итог - сначала найдите оба раскрывающихся списка, а затем ищите значения не только по xpath, но и по xpath + parent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...