页面中有两个字段:用户名和密码(在下面的代码中用**突出显示)。需要使用selenium将数据输入其中。但是,除tabIndex外,两个对象都具有相同的标识符元素。请帮我说明如何识别元素(请参考html)。
请注意:以下代码对我有用,但用户将无法看到GUI中输入的数据。我希望在UI上看到数据。
谢谢, 麦克
@FindBy(name="cams_cb_username")
private WebElement emailId;
@FindBy(name="cams_cb_password")
private WebElement password;
((JavascriptExecutor)DriverFactory.getDriver()).executeScript("arguments[0].setAttribute('value',arguments[1]);", emailId, "username");
((JavascriptExecutor)DriverFactory.getDriver()).executeScript("arguments[0].setAttribute('value',arguments[1]);", password, "pwd");
这是HTML。
<form action="/vito-mma/activateLogin.do" method="post" name="loginForm">
<input type="hidden" value="vitocom" name="cams_security_domain">
<input type="hidden" value="/vito-mma/showPlans.do" name="cams_original_url">
<input type="hidden" value="http" name="cams_login_config">
<input type="hidden" value="" name="cams_cb_partner">
<fieldset class="mma-signin">
<div class="clearfix">
<**input class="bigtext e-hint" type="text" value="" name="e_hint_dummy_input" size="25" autocomplete="off" tabindex="1" style="display: inline;"**>
<input class="bigtext e-hint" type="text" title="Email address" value="" tabindex="1" size="25" name="cams_cb_username" style="display: none; background-color: rgb(255, 255, 255);" autocomplete="off">
</div>
<div class="clearfix">
<**input class="bigtext e-hint" type="text" value="" name="e_hint_dummy_input" size="25" autocomplete="off" tabindex="2"**>
<input class="bigtext e-hint" type="password" title="Password" value="" tabindex="2" size="25" name="cams_cb_password" style="display: none; background-color: rgb(255, 255, 255);" autocomplete="off">
</div>
</fieldset>
<div class="indent">
</form>
注意: 尝试使用Xpath:没有用。 使用IDE记录用户名,(name =“cams_cb_username”)。用过这个 - 也没用。
答案 0 :(得分:2)
对于那些类型的字段,使用Xpath很好。因为我也是Xpath新手,有办法,我是怎么做到的:
xpath看起来像//input/div
或类似的东西。我不确切知道,这里我真的是新手
在代码中,然后使用
@FindBy(xpath="/the/xpath/provided/by/selenium_ide")
修改强>
看到这张图片
在这里,我使用Selenium IDE创建了简单的测试任务 - 打开您的问题,点击搜索框并输入“搜索”
在最后一个命令中,IDE为我提出了最明显的定位器解决方案。但我可以改变它。
答案 1 :(得分:2)
您可以自定义xpath以使用tabindex
属性和name
属性:
@FindBy(xpath="\\input[@name='cams_cb_username' and @tabindex='1']")
private WebElement emailId;
@FindBy(xpath="\\input[@name='cams_cb_password' and @tabindex='2']")
private WebElement password;
或者,您也可以使用以下内容:
WebElement username = wait.until(presenceOfElementLocated(By.xpath("\\input[@name='cams_cb_username' and @tabindex='1']")));
WebElement password = driver.findElement(By.xpath("\\input[@name='cams_cb_password' and @tabindex='2']"));
username.clear();
username.sendKeys(username);
password.clear();
password.sendKeys(password);
password.submit();
希望这有帮助。
答案 2 :(得分:1)
首先,在您的帖子上,您标记的输入与您在说明中的输入不同(@FindBy(name="cams_cb_username")
&amp; @FindBy(name="cams_cb_password")
。
但是,对于您使用**
标记的内容,相应的CSS选择器为:
第一个:.clearfix:nth-child(1) input[name="e_hint_dummy_input"]
第二个:.clearfix:nth-child(2) input[name="e_hint_dummy_input"]
答案 3 :(得分:0)
您可以直接使用名称来定位元素:例如 1.对于usrname使用:selenium.type(“cams_cb_username”,“你的UN”); 2.密码使用:selenium.type(“cams_cb_password”,“你的PWD”); 或者你可以使用: 对于username:// input [@ name ='cams_cb_username']; 对于PWD://输入[@ name ='cams_cb_password'];
这些应该有用。