我正在尝试登录网站,登录表单中没有与其值相关联的任何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字段中输入的数据。
答案 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']"