Элемент не отображается для флажка, хотя он доступен - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь поставить галочку с помощью Selenium.Страница выглядит следующим образом.

enter image description here

Затем, когда я нажимаю на кнопку «Изменить», она изменяется на показанный ниже формат.

enter image description here

В настоящее время я могу установить флажок в Chrome dev tools, используя приведенный ниже xpath.

//input[@name='value[326071]']

Ниже показано, как выглядит DOM.

enter image description here

Я поставил ветку ожидания перед установкой флажка.Ниже приведен мой код.

Thread.sleep(5000);
WebElement assignWorkSpaceElement = chromeDriver.findElement(By.xpath("//input[@name='value[326071]']"));
assignWorkSpaceElement.click();

Я также пытался использовать приведенный ниже xpath.Все еще не повезло.Я отлаживаю код через IntelliJ и, прежде чем перейти к строке веб-элементов, я могу установить флажок в инструментах разработчика Chrome.Ясно, что там.

//*[contains(@class,'col-md-8')]//input[@name='value[326071]']

, но когда я выполняю код, я получаю следующее исключение.

org.openqa.selenium.ElementNotVisibleException: element not visible
  (Session info: chrome=70.0.3538.110)
  (Driver info: chromedriver=2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363),platform=Mac OS X 10.13.6 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

Что я здесь не так делаю?Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Я думаю, вам нужно изменить свой xpath и не использовать thread.sleep вместо этого webdriver wait.

WebDriverWait wait = new WebDriverWait(driver, 5);
  WebElement e4 = wait.until(ExpectedConditions.visibilityOf(By.xpath("//div[@class='col-md-8- form-control-static']//following::input[1]")));

if(e4.isDisplayed())
{
  e4.click();
}
0 голосов
/ 25 ноября 2018

Насколько я вижу в вашем HTML, похоже, что XPath, который вы находите, имеет несколько элементов ...

Теперь, если вы пытаетесь перебрать все флажки и нажать кнопку, которую можно сделать с помощью:

WebElement assignWorkSpaceElement = chromeDriver.findElements(By.xpath("//input[@name='value[326071]']"));
for (WebElement el : assignWorkSpaceElement ) {
     el.click();
}

Но если вам нужен только один элемент со значением = 326071, вы должны добавить более конкретный XPath, например:

WebElement assignWorkSpaceElement = chromeDriver.findElement(By.xpath("//input[@name='value[326071]' and @type='checkbox' ]"));
assignWorkSpaceElement.click();

Или:

WebElement assignWorkSpaceElement = chromeDriver.findElement(By.xpath("//input[@name='value[326071]' and @value='1' ]"));
assignWorkSpaceElement.click();

Надеюсь, это полезно!

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