如何点击没有ID(Java)的Selenium中的Javascript按钮?

时间:2016-10-26 02:44:17

标签: javascript java selenium selenium-webdriver selenium-ide

我正在用Selenium设置Java程序。

在程序开始时,我使用该程序的Chrome扩展程序会加载Chrome实例。

Chrome然后导航到该页面,选择所有框,并且应该点击由于扩展名而出现的页面上的按钮。

所以我试图点击该按钮,但它是通过扩展程序在页面上显示的Javascript按钮。我没有明确可以使用的ID。

当我检查元素时,我所看到的只是:

<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[contains@class,'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[contains@class,'selected'] and contains(@class, 'repost-selected button-task') and contains(text(), 'Repost Selected')' is not a valid XPath expression.

谢谢!

3 个答案:

答案 0 :(得分:1)

  

但重要的是我点击此按钮。我该怎么办?

您可以使用以下方法点击此按钮: -

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();
    

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分: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);

其他答案无效,因为他们要么无法在页面上找到对象,要么会出现编译错误