如何使用Selenium WebDriver和Java单击没有定义ID的输入类型提交

时间:2016-09-28 18:38:38

标签: java selenium selenium-webdriver

我正在尝试登录网站,登录表单中没有与其值相关联的任何ID,并且它仅使用名称:

<div id="warp">
<div id="content">
<form action="/index.php" method="post" name='login'>
username: <input type="text" name="username">
password: <input type="text" name="password">
<input type="submit" name="login" class="submit" value="login">

使用以下命令我可以填写用户ID和密码,但我无法点击提交。

WebElement username = driver.findElement(By.name("username"));
username.sendKeys("xxxxx");
WebElement password = driver.findElement(By.name("password"));
password.sendKeys("xxxxx");

这不会被执行:

WebElement login = driver.findElement(By.name("login"));
login.click();

错误: -

  

无法找到元素登录

如果我做了element.submit(); 它清除了pass / user字段中输入的数据。

3 个答案:

答案 0 :(得分:1)

正如我在您提供的HTML中看到的,有两个元素同名login,您需要使用login创建更具体的定位器以找到By.cssSelector()按钮下面: -

new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.submit[name = 'login']"))).click();

答案 1 :(得分:0)

你应该使用,

element.submit()

selenium API中提供了一种方法来提交表单详细信息 http://docs.seleniumhq.org/docs/03_webdriver.jsp#user-input-filling-in-forms

从文档中,为您提取信息:

  

填写完表单后,您可能想提交   它。一种方法是找到“提交”按钮并单击   它:

     

driver.findElement(By.id( “提交”))点击();

     

或者,WebDriver在每个方面都有“提交”的便捷方法   元件。如果你在表单中的元素上调用它,WebDriver会   走向DOM,直到找到封闭的形式,然后调用   提交。如果元素不在表单中,那么   将抛出NoSuchElementException:

     

element.submit();

答案 2 :(得分:0)

由于您有2个name='login'元素,因此尝试使用任何唯一属性或使用多个属性来唯一标识该元素。

使用 CSS

"input[value='login']"  

使用 XPath

"input[@value='login']"<br>
"input[@value='login' and @type='submit']"