2011-09-08 11 views
11

Sto facendo webtest usando il selenio Web in C#. Ma sto avendo un problema in cui quando la finestra del browser non è a grandezza naturale, un popup si aprirà a metà fuori dall'area visibile.Come mettere a fuoco un elemento nel modo giusto?

Il problema è che quando sparo un .Click(); non fa nulla perché il collegamento che tento di fare clic è esterno all'area visualizzata.

Quindi, come faccio a concentrarmi sul collegamento per ottenere il clic per funzionare? Sto attualmente utilizzando la seguente soluzione alternativa, ma non penso che sia un bel modo.

 _blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(""); 
     _blogPostPage.FindElement(By.XPath(_popupLogin)).Click(); 

Le sendkeys con lo spazio si concentra sul link e rende Clicca lavoro ogni volta, ma non c'è un modo giusto per farlo?

risposta

15

Abbiamo giocato con il selenio e ci siamo imbattuti in questo problema. Non so se è la WebDriver nel suo complesso, il C# attuazione, la versione di Firefox, ecc, ma abbiamo trovato una soluzione ok:

Il trucco è quello di forzare selenio per valutare la proprietà LocationOnScreenOnceScrolledIntoView sulla classe RemoteWebElement (che viene ereditato da FirefoxWebElement e implementa IWebElement). Questo costringe il browser a scorrere in modo che l'elemento sia visibile.

Il modo in cui abbiamo fatto è quello di utilizzare un metodo di estensione:

using OpenQA.Selenium; 
using OpenQA.Selenium.Remote; 

namespace Namespace 
{ 
    public static class ExtensionMethods 
    { 
     public static IWebElement FindElementOnPage(this IWebDriver webDriver, By by) 
     { 
      RemoteWebElement element = (RemoteWebElement)webDriver.FindElement(by); 
      var hack = element.LocationOnScreenOnceScrolledIntoView; 
      return element; 
     } 
    } 
} 

questo modo tutto quello che dobbiamo fare è cambiare il codice generato da:

driver.FindElement(By.Id("elementId")).Click(); 

a:

driver.FindElementOnPage(By.Id("elementId")).Click(); 

Spero che funzioni per voi !?

+0

Cool grazie, ci proverò lunedì :) ,, Sembra meglio della mia soluzione;) –

+0

Ha funzionato come un fascino. Grazie per l'input –

1

Invece di inviare la chiave di invio per il valore vuoto, inviarlo per lo spazio. Questa è la scorciatoia da tastiera per selezionare una casella di controllo.

Basta sostituire il codice:

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(""); 
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click(); 

da

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space); 
0

driver.find_element(:id, "edit-section").send_keys " " con lo spazio ha lavorato per me.

Sto usando webdriver rspec con selenio-server-2.24.1 e ho avuto problemi con IE8 - Ho continuato a ricevere Selenium::WebDriver::Error::ElementNotVisibleError. Stava lavorando in IE9 e FF ma non in IE8 fino a quando non ho aggiunto send_keys "".

Problemi correlati