2

このページには、ユーザー名とパスワードの 2 つのフィールドがあります (以下のコードでは ** で強調表示されています)。セレンを使用してデータを入力する必要があります。ただし、両方のオブジェクトには、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 で試しました: 動作しませんでした。ユーザー名 (name="cams_cb_username") の IDE で記録されます。これを使用しました-どちらも機能しませんでした。

4

4 に答える 4

2

You could customize the xpath to use the tabindex attribute and the name attribute :

@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;

Or alternatively, you could use something like this :

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();

Hope this helps.

于 2012-11-14T13:12:51.557 に答える
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 に答える
1

まず、投稿で、説明にあるものとは異なる 2 つの入力をマークしました ( @FindBy(name="cams_cb_username")& @FindBy(name="cams_cb_password").

ただし、 でマークしたものについては**、対応する CSS セレクターは次のとおりです。

  1. 最初の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 use のように: 2.パスワードの使用: selenium.type("cams_cb_password","your PWD"); または、次のように使用できます。ユーザー名の場合: //input[@name='cams_cb_username']; PWD の場合: //input[@name='cams_cb_password'];

これらは機能するはずです。

于 2012-11-16T08:50:59.653 に答える