ich möchte mein TextField in Selenium finden, aber ich weiß nicht wie (ich benutze Sellenium zum ersten Mal).
Ich habe es versucht:
driver.findElement(By.id("originTextField"))
oder von xPath und cssSelector String, die von chrome in dev-Tools generiert werden.
Bitte helfen Sie mir, ich würde mich über eine Erklärung freuen.
das ist HTML:
org.openqa.Selenium.NoSuchElementException im Volksmund bekannt als NoSuchElementException erweitert org.openqa.Selenium .NotFoundException Dies ist eine Art von WebDriverException .
NoSuchElementException kann in 2 Fällen wie folgt ausgelöst werden:
Bei Verwendung von WebDriver.findElement(By by)
:
//example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));
Bei Verwendung von WebElement.findElement(By by)
:
//example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));
Gemäß den JavaDocs sollte WebDriverException, NoSuchElementException die folgenden Konstantenfelder enthalten:
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)
Der Grund für NoSuchElementException kann einer der folgenden sein:
<iframe>
-Tag.Die Lösung für die Adresse NoSuchElementException kann eine der folgenden sein:
Nehmen Sie eine Locator-Strategie an, die das gewünschte WebElement eindeutig identifiziert. Sie können Hilfe von Developer Tools (Ctrl+Shift+I oder F12) und benutze Element Inspector.
Hier finden Sie eine ausführliche Diskussion zu wie Sie ein Element in Selenium3.6 untersuchen können, da ein Firebug für FF 56 nicht mehr möglich ist?
Verwenden Sie executeScript()
, um das Element wie folgt anzuzeigen:
WebElement elem = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem);
Hier finden Sie eine ausführliche Diskussion zu Scrollen mit Selen zum Seitenanfang in Python
Wenn das Incase-Element das Attribut style = "display: none;" hat, entfernen Sie das Attribut wie folgt durch die Methode executeScript()
:
WebElement element = driver.findElement(By.xpath("element_xpath"));
((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element)
element.sendKeys("text_to_send");
Um zu überprüfen, ob sich das Element in einem <iframe>
befindet, durchlaufen Sie das HTML, um das entsprechende <iframe>
-Tag und switchTo()
das gewünschte iframe mit einer der folgenden Methoden zu finden:
driver.switchTo().frame("frame_name");
driver.switchTo().frame("frame_id");
driver.switchTo().frame(1); // 1 represents frame index
Hier finden Sie eine ausführliche Diskussion zu Ist es möglich, ohne Verwendung von driver.switchTo (). Frame (“frameName”) in Selenium Webdriver Java zu einem Element in einem Frame zu wechseln? .
Wenn das Element nicht sofort vorhanden/sichtbar im HTML-DOM ist, induzieren Sie WebDriverWait with ExpectedConditions setze die richtige Methode wie folgt:
Warten auf presenceOfElementLocated :
new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
Warten auf visibleOfElementLocated :
new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
Warten auf elementToBeClickable :
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
Ihr Code ist korrekt. Ich vermute, das Problem hat dazu geführt, dass die Seite nicht vollständig geladen wurde, wenn Sie das Element finden.
Fügen Sie einen langen Schlaf hinzu, bevor Sie das Element finden. Wenn Sie den Schlaf verbessert haben, ändern Sie den Schlaf in Warten.
Hier ist der Code: Es bedeutet 10s warten, wenn das Element nicht vorhanden ist:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "originTextField"))
)