Selenium按钮单击不起作用

时间:2016-01-20 07:37:09

标签: java selenium selenium-firefoxdriver

我正在使用具有用户身份验证模块的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();
}

4 个答案:

答案 0 :(得分:0)

出于某种原因,在某些页面上,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中没有扩展方法,但你可以解决这个问题。

答案 1 :(得分:0)

有些时候在点击前睡觉会正确模拟点击。像

Thread.sleep(3000);
    driver.findElement(By.id("cred_sign_in_button")).click();

如果上面一个不起作用,就像你已经尝试过所有定位器和动作一样,那么试试java脚本执行器

WebElement element = driver.findElement(By.id("cred_sign_in_button"));
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", element);

谢谢你, 穆拉利

答案 2 :(得分:0)

试试这个,

WebElement element = driver.findElement(By.id("cred_sign_in_button"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
[enter link description here][1]executor.executeScript("arguments[0].click();", element);

访问Here

答案 3 :(得分:0)

您可以尝试使用expected conditions

进行明确等待
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.id("cred_sign_in_button"))).click();