我正在尝试使用XPath定位器查找以下按钮:
//button[contains(text(), 'Save Request')]
但是,当我这样做时,我得到一个错误:
Element is not Visible
当我尝试使用Chropath输入此XPath时,它似乎在样式XPath属性后面的“ 1”上突出显示。我该如何解决这个问题?
我尝试添加一个等待,直到元素可见,但仍然遇到相同的问题:
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>
答案 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)
您还可以找到元素
通过ID
WebElement element = driver.findElement(By.id("submit"));
按名称
WebElement element = driver.findElement(By.name("firstname"));
通过ClassName
WebElement parentElement = driver.findElement(By.className("button"));
//or
WebElement childElement = parentElement.findElement(By.id("submit"));
通过TagName
WebElement element = driver.findElement(By.tagName("button"));
通过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 !