2016-10-26 3 views
1

Я создаю программу на Java с Selenium.Как нажимать на кнопку Javascript в Selenium без ID (Java)?

В начале программы расширение Chrome, которое я использую, загружается программой с экземпляром Chrome.

Затем Chrome переходит к этой странице, выбирает все поля и должен щелкнуть по кнопке на странице, которая появляется из-за расширения.

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

Когда я проверить элемент, все, что я вижу это:

<a href="javascript:void(0);" class="selected button-task" 
style="width: 140px; margin-left: 5px; height: 23px;"> 
<img src="websiteimage.png here" width="20px">Selected Task</a> 

В отличие от других вещей, я могу нажать на, нет типа (чекбоксы, кнопки и т.д.) или конкретный ID можно искать вне. Но важно нажать эту кнопку. Что мне делать?

Я получаю эту ошибку, когда я использую это:

Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: 
Unable to locate an element with the xpath expression //a[[email protected],'selected'] and contains(@class, 'repost-selected button-task') and contains(text(), 'Repost Selected') because of the following error: 

SyntaxError: Failed to execute 'evaluate' on 'Document': 
The string '//a[[email protected],'selected'] and contains(@class, 'repost-selected button-task') and contains(text(), 'Repost Selected')' is not a valid XPath expression. 

Спасибо!

ответ

0

Я понял, как ее решить:

WebElement extensionBox = driver.findElement(By.xpath(".//a[normalize-space()='Selected Task']")); 

Actions actionsTwo = new Actions(driver); 
JavascriptExecutor jseTwo = (JavascriptExecutor) driver; 
actionsTwo.moveToElement(extensionBox).click(); 
jseTwo.executeScript("arguments[0].click()", extensionBox); 

Другие ответы не работают, потому что они либо не найдет объект на странице, или дал бы ошибки компиляции

0

Попробуйте:

driver.findElement(By.xpath("//a[[email protected],'selected'] and contains(@class, 'button-task') and contains(text(), 'Selected Task')")).click() 
+0

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

1

But it is important I click this button. What should I do?

Вы можете нажать на эту кнопку, используя следующие подходы: -

WebDriverWait wait = new WebDriverWait(driver,10); 
  • использованием By.cssSelector(): -

    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.selected.button-task"))).click(); 
    
  • с помощью By.linkText(): -

    wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Selected Task"))).click(); 
    
  • использованием By.partialLinkText(): -

    wait.until(ExpectedConditions.elementToBeClickable(By.partialLinkText("Selected Task"))).click(); 
    
  • использованием By.xpath(): -

    wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//a[normalize-space()='Selected Task']"))).click(); 
    
+0

Большое спасибо за помощь! К сожалению, когда я пишу: WebDriverWait wait = WebDriverWait (драйвер, 10), он возвращает мне синтаксическую ошибку, говоря: «Метод WebDriverWait (ChromeDriver, int) не определен для типа AutomateProgram». Это странный b/c, я импортировал WebDriverWait и все такое. Есть идеи? – user3196126

+0

@ user3196126 Он не должен «ChromeDriver», вам нужно передать ссылочную переменную этого, которую вы инициировали ранее.Некоторые вроде «ChromeDriver driver = new ChromeDriver(); WebDriverWait (драйвер, 10)» –

+1

О нет, я сделал именно это, вы можете видеть, что я сделал на моем снимке экрана здесь. Я размыл некоторые конфиденциальные данные, но все, что уместно: http://i.imgur.com/kA6WhbY.png – user3196126