wake-up-neo.com

So identifizieren und wechseln Sie den Frame im Selenium-Web-Treiber, wenn der Frame keine ID hat

Kann mir jemand sagen, wie ich den Iframe identifizieren kann, der nur einen Titel hat?

<iframe frameborder="0" style="border: 0px none; width: 100%; height: 356px; min-width: 0px; min-height: 0px; overflow: auto;" dojoattachpoint="frame" title="Fill Quote" src="https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none">

Ich habe es mit dem folgenden Code versucht, aber es funktioniert nicht 

driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
25
Sunil wali

sie können cssSelector verwenden,

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
25
Amith

driver.switchTo().frame() weist mehrere Überladungen auf.

  1. driver.switchTo().frame(name_or_id)
    Hier hat dein iframe weder eine ID noch einen Namen, also nichts für dich.

  2. driver.switchTo().frame(index)
    Dies ist die letzte Option, die Sie auswählen können, da die Verwendung des Index nicht stabil genug ist, wie Sie sich vorstellen können. Wenn dies Ihr einziger iFrame auf der Seite ist, versuchen Sie es mit driver.switchTo().frame(0)

  3. driver.switchTo().frame(iframe_element)
    Die häufigste. Sie lokalisieren Ihren Iframe wie andere Elemente und übergeben ihn dann an die Methode.

Hier scheint die Suche nach title Attributen die beste zu sein.

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
// driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@title='Fill Quote']")));
38
Yi Zeng

Sie können auch src verwenden, um zum Frame zu wechseln. Folgendes können Sie verwenden:

driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@src='https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none']")));
4
Shawn Ghavami

Stellen Sie sicher, dass Sie zu Standardinhalt wechseln, bevor Sie zu Frame wechseln:

driver.switchTo().defaultContent();
driver.switchTo().frame(x);

x kann die Bildnummer sein oder Sie können einen driver.findlement verwenden und eine der verfügbaren Optionen verwenden, z. B .: driver.findElementByName("Name").

3
user6147581

Sie können Css Selector oder Xpath verwenden:

Ansatz 1: CSS Selector

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));

Ansatz 2: Xpath

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@title='Fill Quote']")));

https://seleniumatfingertips.wordpress.com/2016/07/05/handling-frames-in-Selenium-webdriver-with-Java/

2
Jackin Shah

1) gehe zur HTML-Ansicht 

2) Geben Sie iframe ein und finden Sie Ihr gewünschtes Bild, zählen Sie den Wert und wechseln Sie mit zu ihm

oASelFW.driver.switchTo().frame(2); 

wenn es das erste Bild ist, verwenden Sie oASelFW.driver.switchTo().frame(0); 

wenn es sich um einen zweiten Frame handelt, verwenden Sie jeweils oASelFW.driver.switchTo().frame(1);

2
Ajay

Es gibt drei Möglichkeiten, zum Frame zu wechseln

1)Can use id
2)Can use name of the frame
3)Can use WebElement of the frame

2 -> driver.switchTo().frame("name of the frame");

1
Kiran Kumar

Am einfachsten geht das so. Wenn es sich um einen Rahmen handelt, können Sie mit der rechten Maustaste auf das Feld klicken und wenn Sie die Option "Rahmen in einem Tab öffnen" sehen, tun Sie es.

Dann nehmen Sie die URL des Frames und das ist, was Sie mit "driver.get" in Ihr Python-Skript einfügen ( http: // blah blah ..)

Dann kann Selen Ihr benanntes Element finden. Dies ersparte mir Stunden, alle Vorschläge auszuprobieren, über die ich lernte, aber nicht funktionierte. Problem mit mir war es in einem Rahmen.

Ich verwende Linux, was mir die Rechtsklick-Option gibt, den Frame von selbst in einem anderen Tab zu öffnen. Ich benutze Windows nicht, also weiß ich nicht, ob Sie diese Option im Rechtsklick-Menü erhalten würden.

Ganzarola

1
Ganz

Ich kämpfte damit für eine Weile; Eine besonders frustrierende Website hatte mehrere verschachtelte Frames auf der Website. Ich konnte keinen Weg finden, die Frames zu identifizieren - kein Name, keine ID, kein Xpath, kein CSS-Selector - nichts.

Irgendwann erkannte ich, dass die Bilder mit der obersten Ebene nummeriert sind, wobei Bild (0) das zweite Bild (1) usw. ist.

Da ich immer noch nicht wusste, in welchem ​​Frame das Element, in dem ich brauchte, saß, schrieb ich eine for-Schleife, um von 0 bis 50 zu beginnen. Wenn dies fehlgeschlagen ist, habe ich eine Nachricht ausdrucken und fortfahren können.

Ich habe zu viel Zeit mit diesem Problem für eine so einfache Lösung verbracht.

driver.switch_to.default_content()
for x in range(50):
    try:
        driver.switch_to.frame(x)
        driver.find_element_by_xpath("//*[@id='23']").click()
        driver.find_element_by_xpath("/html/body/form/table/tbody/tr[1]/td/ul/li[49]/a").click()
    except:
        print("It's not: ", x)
        continue
0
Bilbo Swaggins