我正在开发具有用户身份验证模块的cloudbase
项目。可以使用用户凭据以及使用 OAuth
身份验证对系统进行用户身份验证。
我正在使用 Selenium 自动执行此操作,但是当我尝试单击“登录”按钮时它不起作用,
@BeforeTest
public void setUp()
{
driver = new FirefoxDriver();
driver.get("Application URL");
driver.manage().window().maximize();
}
@Test
public void enterCredentials()
{
driver.findElement(By.id("cred_userid_inputtext")).sendKeys("email address");
driver.findElement(By.id("cred_password_inputtext")).sendKeys("password");
driver.findElement(By.id("cred_sign_in_button")).click();
}
我已经尝试使用 sendKeys(Keys.ENTER)
和 sendKeys(Keys.RETURN)
还尝试使用操作
{
WebElement signIn_button = driver.findElement(By.id("cred_sign_in_button"))
Actions enterSignIn = new Actions(driver);
enterSignIn.moveToElement(signIn_button);
enterSignIn.click();
enterSignIn.perform();
}
最佳答案
出于某种原因,在某些页面上 Firefox 似乎需要对 Click() 进行特殊处理。我是这样解决的(在C#中,但Java应该类似):
// special workaround for the FirefoxDriver
var actions = new Actions(driver);
actions.MoveToElement(element);
ToolBox.DisableTimeout(testParams);
actions.Release().Build().TryPerform();
ToolBox.EnableTimeout(testParams);
actions.MoveToElement(element);
actions.Click().Build().Perform();
说明:我在调用 Click() 之前显式调用 Release()。有时是必要的,有时则不是。如果没有必要,那么调用 Release() 最终会等待隐式超时(如果有的话)结束,然后引发异常。这就是为什么我在调用 Release() 时暂时禁用超时,也是为什么我将其包装在 TryPerform() 方法中,以便忽略异常。看一下我的 TryPerform() 方法:
public static bool TryPerform(this IAction action)
{
try
{
action.Perform();
}
catch (Exception)
{
return false;
}
return true;
}
我知道,Java 中没有扩展方法,但你也许可以类似地解决这个问题。
关于java - Selenium 按钮点击不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894084/