Как нажать на элемент в соответствии с HTML, который находится внутри модального поля через Selenium? - PullRequest
0 голосов
/ 18 сентября 2018

Я автоматизирую какой-то сайт, на котором мне нужно выйти из системы. Я сталкиваюсь с трудностями в этом коде:

WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));
Category_Body.click();
d.findElement(By.id("logout_user")).click();
Thread.sleep(1000);

HTML:

<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>

Ошибка:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"user logout"}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Попробуйте для этого следующий код:

WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".user.logout")));
Category_Body.click();

PS: Вы также можете сделать это с помощью ExpectedCondition.elementToBeClickable.

Надеюсь, это поможет вам!

0 голосов
/ 18 сентября 2018

В соответствии с вашим местоположением требуемого элемента выход в пределах Model Box вам нужно заставить WebDriverWait для элемента быть активным , и вы можете использовать любую из следующих опций:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.user.logout[title='Sign out'][data-toggle='modal']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='user logout' and @title='Sign out'][@data-toggle='modal']"))).click();
    
0 голосов
/ 18 сентября 2018

Я думаю, что проблема с идентификатором Вы использовали

    WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));

Но в соответствии с вашим HTML

<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>

Ссылка не имеет идентификатора под названием " User Logout " Без использования идентификатора попробуйте использовать класс By.findElementByClassName("user logout")

В качестве второго решения попробуйте использовать xpath (который будет работать большую часть времени)

Если оба решения непригодны для использования, вы можете использовать JavascriptExecutor (элементы, которые трудно перехватить, легко обрабатываются с помощью JavascriptExecutor)

ПРИМЕЧАНИЕ: Основная проблема связана с тем, что вы используете «выход пользователя из системы», когда такого идентификатора нет

Приветствия

...