2

页面中有两个字段:用户名和密码(在下面的代码中用**突出显示)。需要使用 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")。用过这个 - 也没有用。

4

4 回答 4

2

对于这些类型的字段,最好使用 Xpath。因为我也是 Xpath 新手,所以有办法,我该怎么做:

  • 安装Selenium IDE并单击(并输入)您要输入的字段
  • 在 selenium IDE 中,您将看到 IDE 使用的定位器。你可以进一步改变它

xpath 将看起来像//input/div或类似的东西。我不知道确切,在这里我真的是新手

然后在代码中使用

@FindBy(xpath="/the/xpath/provided/by/selenium_ide")

编辑

看到这张图片 在此处输入图像描述

在这里,我使用 Selenium IDE 创建了简单的测试任务 - 打开您的问题,单击搜索框并输入“搜索”

在最后一个命令中,IDE 向我提出了最明显的定位器解决方案。但我可以改变这一点。

于 2012-11-14T13:06:57.437 回答
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();

希望这可以帮助。

于 2012-11-14T13:12:51.557 回答
1

首先,在您的帖子中,您标记的两个输入与描述中的输入不同(@FindBy(name="cams_cb_username")& @FindBy(name="cams_cb_password")

但是,对于您用 标记的内容**,相应的 CSS 选择器是:

  1. 第一 :.clearfix:nth-child(1) input[name="e_hint_dummy_input"]

  2. 第二个 :.clearfix:nth-child(2) input[name="e_hint_dummy_input"]

于 2012-11-14T14:27:01.717 回答
0

您可以直接使用名称来定位元素:如 1.For usrname 使用:selenium.type("cams_cb_username","your UN"); 2.密码使用:selenium.type("cams_cb_password","your PWD"); 或者你可以使用:对于用户名://input[@name='cams_cb_username']; 对于密码://输入[@name='cams_cb_password'];

这些应该有效。

于 2012-11-16T08:50:59.653 回答