元素不可见-XPath仅查找样式

时间:2018-12-19 10:25:06

标签: java selenium selenium-webdriver xpath webdriverwait

我正在尝试使用XPath定位器查找以下按钮:

//button[contains(text(), 'Save Request')]

但是,当我这样做时,我得到一个错误:

Element is not Visible

当我尝试使用Chropath输入此XPath时,它似乎在样式XPath属性后面的“ 1”上突出显示。我该如何解决这个问题?

enter image description here

我尝试添加一个等待,直到元素可见,但仍然遇到相同的问题:

public CreatePartRequestModalPage saveRequest() {
    waitForElement(By.xpath(SAVE_REQUEST_XPATH), State.ELEMENT_IS_VISIBLE);
    saveRequest.click();
    return PageFactory.initElements(driver, CreatePartRequestModalPage.class).get();
}

HTML作为文本:

<button class="btn btn-primary ng-scope" ng-click="ctrl.saveRequest()" ng-if="ctrl.partsList.length > 0" style="" xpath="1">
                Save Request
</button>

5 个答案:

答案 0 :(得分:1)

最好使用其他contains text()

您可以使用//button[@class="btn btn-primary ng-scope"]

希望这会有所帮助

答案 1 :(得分:1)

要找到文本为保存请求的按钮,可以使用以下基于 xpath 的解决方案:

//button[@class='btn btn-primary ng-scope' and normalize-space()='Save Request']

但是由于元素是元素上的Angular元素到click(),您必须诱使 WebDriverWait 使元素可点击可以使用以下解决方案:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn btn-primary ng-scope' and normalize-space()='Save Request']"))).click();

答案 2 :(得分:1)

虽然其他答案可能可行,但我想提出另一种方法。 问题不在于找到元素,而是在可见之前与其进行交互(单击)。一个较小的解决方法是通过JavaScript click元素。

// Assume driver is a valid WebDriver instance that
// has been properly instantiated elsewhere.
WebElement element = driver.findElement(By.xpath(SAVE_REQUEST_XPATH));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

这样,Selenium可以单击该元素并不重要。希望它能起作用!

答案 3 :(得分:0)

您还可以找到元素

  1. 通过ID

    WebElement element = driver.findElement(By.id("submit"));
    
  2. 按名称

    WebElement element = driver.findElement(By.name("firstname"));
    
  3. 通过ClassName

    WebElement parentElement = driver.findElement(By.className("button"));
    //or
    WebElement childElement = parentElement.findElement(By.id("submit"));
    
  4. 通过TagName

    WebElement element = driver.findElement(By.tagName("button"));
    
  5. 通过XPath

因此,尝试使用上述方法查找元素。

尝试使用类名获取按钮,它将起作用。

答案 4 :(得分:0)

Apologies all, it turns out there was a javascript error on the page and the button wasn't clicking. This is the reason why I was getting an "Element is not Visible" error. Thanks everybody for the help !