我有一个包含一些输入类型的表单' 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层次结构中?感谢
答案 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)
答案 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)));
}
如果这没有用,请告诉我。