Нажатие на кнопку с ролью атрибута в теге div с использованием Selenium

#java #html #selenium #button

#java #HTML #selenium #кнопка

Вопрос:

Как нажать на button с помощью приведенного ниже HTML-тега

 <div class="_1WZqU PNlAR" role="button">OK</div>
  

Я попытался со следующими:

 driver.findElement(By.xpath("//button[text()='OK']")).click();
driver.findElement(By.className("_1WZqU PNlAR")).click();
  

Я получил следующее сообщение об ошибке:

недопустимый селектор: составные имена классов не разрешены

Комментарии:

1. Добавьте исходный код HTML, отформатируйте свой код, добавьте дополнительную информацию, что doesn't work означает. Вы получаете исключение или элемент просто не нажат?

2. Вы пытались щелкнуть с помощью javascript?

3. Фактическая ошибка, которую вы получаете, заключается в том, что вы ввели два имени класса By.className() . Вы должны выбрать один из классов или преобразовать его в CSS-селектор, By.cssSelector("._1WZqU.PNlAR") .

Ответ №1:

попробуйте использовать, тега button нет в HTML

 //div[text()='OK']
  

используйте этот код

 driver.findElement(By.xpath("//div[text()='OK']")).click();
  

вы также можете использовать JavascriptExecutor

 WebElement OKBtnElement = driver.findElement(By.xpath("//div[text()='OK']"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", OKBtnElement );
  

Комментарии:

1. Хорошая уловка в div теге!

2. Я не думаю, что следует использовать JavascriptExecutor, это не работает как обычный щелчок… Тем не менее, в некоторых случаях это неизбежно… Сначала OP должен попробовать WebDriverWait

3. IMO @MosheSlavin довольно правильно упомянул, что для того, чтобы высмеять поведение, подобное человеческому, сначала следует опробовать сильные, мощные и проверенные click() средства, а javascript на click() основе должен быть последним средством. В противном случае эти ответы не будут полезны будущим читателям и будут подвержены негативным отзывам.

Ответ №2:

Вам следует использовать WebDriverWait:

 WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[text()='OK']")));
element.click();
  

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

Комментарии:

1. WebDriverWait неизбежен, поскольку элемент явно является динамически генерируемым элементом.