Seleniumを使用して、いくつかの要素を含むフォームを送信したいと思います。例えば:
<form name="something">
<input type="text" name="a">Username</input>
<input type="password" name="b">password</input>
<select name="c" id="c">
<option value="1">1</option>
<option value="2">2</option>
</select>
<input type="submit" name="submit">submit</input>
</form>
Find.Element(By.name)を使用してフォーム要素を見つける場合、その子要素a、b、およびcを取得するにはどうすればよいですか?そして、これらの3つの要素に値を入力してからフォームを送信しますか?
別の同様の質問:要素a
を取得する場合、要素b
とc
を取得する方法は同じ形式であり、最初に値を入力(または選択)してから、フォームを送信しますか?
前もって感謝します!
Xpathを使用して、_parent/*
_を使用して特定の要素のすべての直接の子要素を取得できます。
以下のように、findElement()
を使用してform
要素を既に持っている場合:
_WebElement formElement = driver.findElement(By.name("something"));
List<WebElement> allFormChildElements = formElement.findElements(By.xpath("*"));
_
または直接使用:
_List<WebElement> allFormChildElements = driver.findElements(By.xpath("//form[@name='something']/*"));
_
次に、各要素のタグとタイプを見て、その値を指定します。
_for (WebElement item : allFormChildElements)
{
if (item.getTagName().equals("input"))
{
switch (item.getAttribute("type"))
{
case "text":
//specify text value
break;
case "checkbox":
//check or uncheck
break;
//and so on
}
}
else if (item.getTagName().equals("select"))
{
//select an item from the select list
}
}
_
driver = webdriver.Firefox()
driver.get("https://www.hackerearth.com/problems/")
#find all form input fields via form name
_inputs = driver.find_elements_by_xpath('//form[@name="signup-form"]//input')
for input in _inputs:
#print attribute name of each input element
print input.get_attribute('name')
o/p
ファーストネーム
苗字
Eメール
パスワード
参加する
申し訳ありませんが、最初に質問のポイントを逃しました。たとえば、xpathロケーターを使用して、フォーム内の任意の要素を見つけることができます。あなたの場合
find.Element(By.xpath("//form/*[@name='a']"))
find.Element(By.xpath("//form/*[@name='b']"))
find.Element(By.xpath("//form/*[@name='c']"))
ページに複数のフォームタグがある場合は、任意の属性で指定することもできます。
find.Element(By.xpath("//form[@name='something']/*[@name='c']")) //as it is in your sample
また、フォームを最初に指定して、その中の要素を操作することもできます。私はあなたの構文に接しているかどうかはわかりませんが、最初に、何らかの方法でフォームwebelementを何らかのvarに返す必要があります(form
にします)。その後、webdriverインスタンスの代わりにこの変数を渡すことができます。
form.find.Element(By.xpath('./some/child/locator'))
フォーム要素を変数に保存し、それを検索コンテキストとして使用して子要素を見つけます。
WebElement formElement = driver.findElement(By.name("something"));
WebElement a = formElement.findElement(By.name("a"));
WebElement b = formElement.findElement(By.name("b"));
WebElement c = formElement.findElement(By.name("c"));
a.sendKeys("first child element [a]");
b.sendKeys("password");
c.submit();