我是自动化框架的Ruby脚本的新手。我正在尝试将Selenium和Ruby组合用于自动化框架。我发现的是,Ruby硒中没有elementToBeClickable吗?我有一个脚本,可以使用常规click方法在元素上单击。但是,单击不起作用,元素也不会被单击。因此,我正在考虑等待元素可单击,但是Selenium的ruby库没有Java和C#中的那种方法。你们如何等待该元素在Ruby中可点击?
def click_more_actions_button
more_actions_id = 'btnMoreActions'
el = @wd.find_element(id: more_actions_id)
el.click
end
答案 0 :(得分:0)
wait.until(ExpectedConditions.elementToBeClickable (By.id("foo")));
下面几行与上面的Java代码完全等效,
wait.until { driver.find_element(id: "foo").enabled? }
事实是java中的elementToBeClickable方法具有误导性,实际上它将检查元素的启用状态。
请参阅ExpectedContions.java中elementToBeClickable的实现,
/**
* An expectation for checking an element is visible and enabled such that you can click it.
*
* @param locator used to find the element
* @return the WebElement once it is located and clickable (visible and enabled)
*/
public static ExpectedCondition<WebElement> elementToBeClickable(final By locator) {
return new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
WebElement element = visibilityOfElementLocated(locator).apply(driver);
try {
if (element != null && element.isEnabled()) {
return element;
}
return null;
} catch (StaleElementReferenceException e) {
return null;
}
}
@Override
public String toString() {
return "element to be clickable: " + locator;
}
};
}
在github中引用this。
答案 1 :(得分:0)
实际上,Ruby编程语言中没有这种直接方法。
这里是检查并等待直到元素显示并启用对其执行操作(如单击,send_keys等)的替代方法:
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
element = wait.until{
tmp_element = driver.find_element(:name, 'password')
tmp_element if tmp_element.enabled? && tmp_element.displayed?
}
使用wait.until
,我们可以做到。
希望对您有帮助。如有任何疑问,请随时提问。