Ich arbeite mit einer Website mit Pop-up-Tabellen. Wenn ein Benutzer zum Beispiel über einen Link schwebt oder klickt, wird ein kleines Popup mit einer Tabelle mit Daten angezeigt. Es gibt viele dieser Links auf derselben Seite. Beim Extrahieren von Daten aus den Tabellen wird jedes Popup sequenziell geöffnet und geschlossen, indem die Links der Reihe nach angeklickt werden.Selenium ChromeDriver Wie klickt man Elemente mit negativen x, y Pixelpositionen? C#
Zum Schließen eines Popup-Fensters klicken Sie auf ein kleines "X" in der oberen rechten Ecke des Popup-Fensters. Ungefähr 99% der Zeit ist dies kein Problem. In etwa 1% der Fälle befindet sich der obere Teil des Popup-Fensters jedoch über dem Bildschirm, mit einem negativen "y" -Pixel, das den Popup-Button "X" verdeckt - und wiederum negativ. y 'Pixelposition. Bei manueller Bedienung (Bewegen der Maus von Hand) kann ich die Größe des Chrome-Fensters ändern und das Popup wird wieder in das Fenster "einrasten", wobei mindestens ein "y" -Pixel von Null ist.
Ich konnte diese manuelle Neuzentrierung des Pop-ups mit Selenium-Befehlen nicht replizieren. Der nächste Befehl, den ich finden kann, ist MoveToElement
, der manchmal funktioniert, aber andere nicht (ich kann nicht ergründen, warum ich Teilerfolg sehe, aber das ist ein Exkurs von dieser Frage).
Soweit ich das beurteilen kann, wird Selen es mir nicht erlauben, mit einem Element zu interagieren, das eine negative x- oder y-Pixelposition hat. Hier
ist, was ich bin derzeit versucht, mit mäßigem Erfolg:
// example begins with pop-up already displayed. Data has been extracted.
// We are now ready to close the pop-up by clicking the 'X' button.
// here we move to the table, otherwise the detail popup close button will be off screen. Warning: this works with partial success.
var actions = new Actions(Session.Driver);
actions.MoveToElement(table);
actions.Perform();
// Must close unless the popup may (or may not) cover the next link.
var closeButton = Session.Driver.FindElement(By.Id(id))
.FindElements(By.CssSelector("a.cmg_close_button"))
.FirstOrDefault();
if (closeButton != null)
{
Wait.Until(d => closeButton.Displayed);
if (closeButton.Location.Y < 0 || closeButton.Location.X < 0)
{
Log.Error("Could not close button. The popup displayed the close_button off-screen giving it a negative x or y pixel location.");
}
else
{
closeButton.Click();
}
}
Bitte geben Sie Strategien für den Umgang mit der negativen x, y Pixelposition des Popup-Fensters.
Ich verwende C# 4.6, Selenium 2.45, ChromeDriver (Chrome) und VS2015 CE IDE.
Warum 'Sie nicht versuchen, mit' ExpectedConditions.ElementToBeClickable (By), die gibt Sie klickbares Element mit positiver Höhe und Breite. –
@SaurabhGaur Was ist es über '.ElementToBeClickable()', das das Element zwingt, auf dem Schirm zu sein? – JeffC
@Jeffc Nein, es ist nur zu prüfen, bis Element sichtbar und aktiviert, das heißt klickbar. –