textFieldをSeleniumで検索したいのですが、方法がわかりません(初めてセレンを使用します)。
私は試した:
driver.findElement(By.id("originTextField"))
またはxPathと、chrome開発ツールで生成されたcssSelector文字列。
助けてください、私は説明をいただければ幸いです。
これはhtmlです:
org.openqa.Selenium.NoSuchElementException 通称NoSuchElementExceptionextends org.openqa.Selenium.NotFoundException which WebDriverException のタイプです。
NoSuchElementExceptionは、次の2つの場合にスローされます。
WebDriver.findElement(By by)
を使用する場合:
_//example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));
_
WebElement.findElement(By by)
を使用する場合:
_//example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));
_
他のWebDriverExceptionと同様にJavaDocsと同様に、NoSuchElementExceptionには次の定数フィールドが含まれている必要があります。
_Constant Field Type Value
SESSION_ID public static final Java.lang.String "Session ID"
e.g. (Session info: chrome=63.0.3239.108)
DRIVER_INFO public static final Java.lang.String "Driver info"
e.g. (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86)
BASE_SUPPORT_URL protected static final Java.lang.String "http://seleniumhq.org/exceptions/"
e.g. (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html)
_
NoSuchElementExceptionの理由は、次のいずれかです。
<iframe>
_タグ内にあります。NoSuchElementExceptionを解決する方法は、次のいずれかです。
ロケーター戦略 を採用します。これは、目的のWebElementを一意に識別します。 Developer Tools(Ctrl+Shift+I または F12)とElement Inspectorを使用します。
ここでは、 に関する詳細な説明が見つかります。FF56ではFirebugはもうオプションではないため、Selenium3.6で要素を検査する方法はありますか?
executeScript()
メソッドを使用して、次のように要素をスクロールして表示します。
_WebElement elem = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem);
_
要素にstyle = "display:none;"属性がある場合、次のようにexecuteScript()
メソッドを使用して属性を削除します。
_WebElement element = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element)
element.sendKeys("text_to_send");
_
要素が_<iframe>
_内にあるかどうかを確認するには、[〜#〜] html [〜#〜]を上に移動して、それぞれの_<iframe>
_タグとswitchTo()
を見つけます必要なiframeを次のいずれかの方法で使用します。
_driver.switchTo().frame("frame_name");
driver.switchTo().frame("frame_id");
driver.switchTo().frame(1); // 1 represents frame index
_
要素がHTML DOMでpresent/visibleでない場合は、すぐに WebDriverWait を ExpectedConditions に設定してください次のような適切な方法:
presenceOfElementLocated を待機するには:
_new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
_
visibilityOfElementLocated を待機するには:
_new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
_
elementToBeClickable を待機するには:
_new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
_
Selenium の python クライアントベースの関連ディスカッション:
あなたのコードは正しいですが、要素を見つけたときに問題が原因でページが完全に読み込まれなかったと思います。
Find要素の前に長いスリープを追加してみてください。スリープを追加しても機能する場合は、スリープを変更して待機します。
コードは次のとおりです。要素が存在しない場合は10秒待機することを意味します。
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "originTextField"))
)