как выбрать элемент раскрывающегося списка div в селене webdriver - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь получить элемент div из выпадающего списка, но не смог получить желаемый результат.

Я попробовал класс действия и выбрал класс

Это мойкод:

<div class="ant-select-selection
            ant-select-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" tabindex="0"><div class="ant-select-selection__rendered"><div class="ant-select-selection-selected-value" title="Student" style="display: block; opacity: 1;">Student</div></div><span class="ant-select-arrow" unselectable="unselectable" style="user-select: none;"><b></b></span></div>

Это мой скрипт для веб-драйвера:

driver.findElement(By.xpath("//div[@class='ant-select-selection-selected-value']")).click();        
WebElement element=driver.findElement(By.xpath("/html/body/div[1]/div/div[5]/div/div[2]/div/div[2]/div/div[1]/div/form/div[1]/div/div/div/div"));
    Actions action= new Actions(driver);
    driver.manage().timeouts().implicitlyWait(5 ,TimeUnit.SECONDS);
        action.moveToElement(element).click().build().perform();

элемент должен быть выбран, но не получил результат и не получил сообщение об ошибке

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Как упоминалось Дмитрий Т , всегда старайтесь использовать относительный XPath вместо абсолютного XPath.

Ваш код, скорее всего, не работает, поскольку абсолютный XPath неверен.

Кроме того, используйте явные ожидания вместо неявных ожиданий. Список присутствует в DOM всегда, но он виден и кликабелен только при нажатии на раскрывающееся поле.

Попробуйте это:

driver.get("https://goodprofbadprof.com/search-school");
driver.findElement(By.xpath("//div[@class='form-group']/label[contains(text(),'Search By')]/following-sibling::div")).click();
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@role='menu']/li[contains(text(),'State')]"))).click();
0 голосов
/ 18 июня 2019

В качестве абсолютного значения лучше использовать относительный XPath :

/html/body/div[1]/div/div[5]/div/div[2]/div/div[2]/div/div[1]/div/form/div[1]/div/div/div/div
  • выглядит не очень хорошо
  • очень хрупок и чувствителен к любым изменениям DOM

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

//div[@title='Student']

или div элемент текст. В этом случае лучше использовать функцию XPath contains() , поскольку в вашем тексте, похоже, есть разрывы строк

//div[contains(@text(), 'Student')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...