Selenium无法找到输入类型提交

时间:2014-08-13 08:11:39

标签: java selenium selenium-webdriver webdriver

我有一个包含一些输入类型的表单' text'哪个selenium找到并填充好。但是它无法在表单上找到输入类型提交,结构看起来有点像这样:

<div>
<div>
<form>
      <div>other elements are here....</div>
         <p> <input class="btn btn-success" type="submit" name="yt0" value="Register Now" /></p>     
</form>
</div>
<div>   

我尝试了一些最新的方法:

driver.findelement(By.name("yt0")).click();

也尝试过:

driver.findelement(By.name("yt0")).submit();

我可以在页面上清楚地看到元素,并且selenium已经输入了提交上方元素所需的所有文本。

Selenium是否有可能找不到提交,因为它包含在DIV层次结构中?感谢

5 个答案:

答案 0 :(得分:2)

表格是必须提交的表格。

使用

driver.findElement(By.tagName("form")).submit();

希望它有所帮助。

答案 1 :(得分:1)

Selenium应该可以找到上面的元素,从你提供的信息中我看不出为什么它无法点击它。你尝试过不同的定位器吗?

一个例子是:

driver.findElement(By.className("btn-success")).click();

或者你可以看看别人here

还有一些其他的事情可能会发生,当selenium点击它时按钮被禁用,或者只有在填写表单后按钮才会出现?如果是这样,您将需要添加fluent wait以使其成为启用(或使用thread.sleep(500)测试它是否有效,然后花时间等待)。

答案 2 :(得分:1)

您的代码看起来很好。但是如果元素被隐藏,请检查提交是否隐藏我们必须使用Javascript来点击隐藏元素。但在此之前,请尝试使用不同的定位器而不是名称try xpath。

答案 3 :(得分:0)

另一种可能性是元素出现在DOM中,但它还不可点击。 也许你可以尝试学习并实施明确的等待。

以下是WaitTools.java

的一个很好的示例

希望这会有所帮助:D

答案 4 :(得分:0)

Selenium通常比页面加载速度快,比如你点击了一个链接,它会带你到另一个页面。并不总是存在隐式等待,也许您需要等待元素变得可见。

可以使用Explicit waits完成此操作,请参阅下面的代码。

import import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
        .className(className)));

另一种选择是使用JavaScriptExecutor,如果Input被隐藏,这可以帮助您使用Javascript来更改属性。

请记住,有时你需要等待一个元素,并且最好有一个带有静态方法的辅助类,这样你就可以轻松调用这些方法,而无需重写代码,这里是一个示例方法。

public static void waitForVisibilityByClass(WebDriver driver,
            String className, int seconds) {
        WebDriverWait wait = new WebDriverWait(driver, seconds);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By
                .className(className)));
    }

如果这没有用,请告诉我。