2017-02-02 9 views
-1

Я пытаюсь научиться Selenium WebDriver, используя учебники онлайн и т.д ...Как закрыть Popovers и в онлайн-объявлений с селеном WebDriver

Я изо всех сил, чтобы преодолеть эту obctacle, который должен закрыть поповер.


Использование: ноутбуков: Alienware ОС: Windows 10 64бит Browser: Firefox 51.0.1 (32-разрядная версия) Затмение: Версия: Neon.2 Release (4.6.2) Идентификатор сборки: 20161208- 0600 Селен WebDriver: Java 3.0.1 2016-10-18


`package com.indeed.tests; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class IndeedJobSearch { 

    public static void main(String[] args) throws InterruptedException { 
     // TODO Auto-generated method stub 

     //Create firefox driver to drive the browser 

     System.setProperty("webdriver.gecko.driver", "C:\\Users......\\geckodriver.exe"); 
     WebDriver driver = new FirefoxDriver(); 

     //Open Indeed home page 
     driver.get("https://www.indeed.co.uk/"); 
     //Find what field and enter Selenium 
     Thread.sleep(1000); 
     driver.findElement(By.id("what")).sendKeys("Selenium"); 
     //Find location field and enter London 
     driver.findElement(By.id("where")).clear(); 
     Thread.sleep(1000); 
     driver.findElement(By.id("where")).sendKeys("London"); 
     //Find FindJobs button and click on it 
     Thread.sleep(1000); 
     driver.findElement(By.id("fj")).click(); 
     //Close popup - popover, not popup 
      //prime-popover-div 
      //selenium webdriver cannot close bootstrap popovers 
     //Can't find a solution 



     //From job search results page, get page title and jobs count message 
     //searchCount 

     System.out.println(driver.getTitle()); 
     System.out.println(driver.findElement(By.id("searchCount")).getText()); 

     driver.close(); 
    } 

} 

`


Ожидаемый результат: Selenium Webdriver откроет браузер Firefox, загрузит веб-страницу Indeed.co.uk, вставляет «Selenium» в первое поле, вставляет «Лондон» во второе поле, нажимает кнопку поиска, получает титул и работу значения счета в консоли и окне драйвера.

Фактический результат: Селен WebDriver откроет браузер Firefox, загрузите indeed.co.uk веб-страницу, вставьте «Селен» в первом поле, вставить «Лондон» во втором поле, нажмите кнопку поиска, ОСТАНОВКИ фокуса в поле url, и ничего больше не происходит.


Я попробовал несколько решений, но не мог заставить его работать (https://sqa.stackexchange.com/questions/5310/how-to-close-pop-up-window-in-selenium-webdriver)

например


driver.findElement(By.id("prime-popover-close-button")).click(); 

Driver.SwitchTo().frame("prime-popover-div"); 

Driver.findElement(By.id("prime-popover-close-button")).click(); 

Driver.SwitchTo().defaultContent(); 

driver.findElement(By.xpath("//*[@id='prime-popover-close-button']/a/img")).click(); 

Примечание: Не совсем уверен, что мой XPath писался правильно, все еще учусь.

Ничего из этого не работает. Я прочитал кое-что о Selenium WebDriver, не обращаясь к загрузчикам, не уверен, что это точно мой случай, или если кто-либо из вас нашел решение.

Очень хотелось бы решения и или совет :)

большое спасибо заранее.

ответ

0

Ваш код обычно выглядит нормально (кроме использования Thread.Sleep(), что я обращусь в минуту.

В основном то, что вы хотите сделать в этих случаях является правой кнопкой мыши на тесной X диалога и относиться к нему как к любому другому элементу на странице. Найдите локатор для X, в этом случае он также имеет id, prime-popover-close-button, которые мы можем использовать. Все, что вам нужно сделать, это захватить этот элемент, используя id и щелкните по нему, чтобы закрыть всплывающее окно. Я упростил приведенный ниже код.

driver.get("https://www.indeed.co.uk/"); 
driver.findElement(By.id("what")).sendKeys("Selenium"); 
driver.findElement(By.id("where")).sendKeys("London"); 
driver.findElement(By.id("fj")).click(); 
driver.findElement(By.id("prime-popover-close-button")).click(); 

Если вы не пытаетесь проверить UI (ввод текста и нажав кнопки) на странице поиска, вы можете просто перейти непосредственно к URL, и даже кормить свои собственные ключевые слова, если Вы хотите. См. Приведенный ниже код.

String what = "selenium"; 
String where = "london"; 
driver.get("https://www.indeed.co.uk/jobs?q=" + what + "&l=" + where); 
driver.findElement(By.id("prime-popover-close-button")).click(); 

Теперь вернемся к Thread.Sleep(). Эта форма ожидания обычно является плохой практикой. Вы можете провести некоторое исследование деталей, но достаточно сказать, что он не является гибким. Если вы спите в течение 10 секунд, и элемент присутствует в 25 мс, вы долго ждали, что вам не нужно. Читайте на WebDriverWait и ExpectedConditions. Хотя вам здесь это не нужно, вам в конечном итоге придется ждать, и это лучшие практики для ожидания.

+0

Здравствуйте @JeffC, Я попытался, что, как я уже говорил, по вопросу ... Пробовал несколько решений и не работал. У Yogesh Rathi и BurritoBandit был хороший момент, который я должен был сделать, это добавить ожидание появления popover и нажать. (Раньше не передумал ... Я все еще очень новый, я признаю). В любом случае спасибо за совет по поводу сна, я буду читать больше. :) – Fox23

+0

Код, который я написал, является рабочим кодом. Я попробовал это сам, и это сработало. – JeffC

+0

Здравствуйте @JeffC, Прежде чем я разместил этот вопрос здесь, я уже пробовал. Я пробовал много решений, и они не работали. Даже сейчас я создал NewJavaProject, чтобы снова попробовать ваш код. С моей стороны это не сработает. НО, если бы я ожидал ожидаемых условий, тогда остальная часть кода работает. "import org.openqa.selenium.support.ui.WebDriverWait;" "WebDriverWait wait = новый WebDriverWait (драйвер, 10);" "wait.until (ExpectedConditions.elementToBeClickable (By.id (" prime-popover-close-button ")));» Я не знаю, почему он работает на вас без ожидания ожидаемых условий, это не помогло мне. – Fox23

0

Похоже, я делаю то же самое учебное пособие, что и вы. Я столкнулся с той же самой проблемой, что и вы, и попробовал почти все, что вы сделали, чтобы нажать эту кнопку закрытия и убить этот popover, прежде чем найти эту тему.

Похоже, что проблема заключается в том, что popover не может быть немедленно доступен для Selenium, чтобы закрыть его после нажатия кнопки Поиск. Необходимо подождать «wait.until ..», чтобы дождаться появления popover, чтобы мы могли закрыть его. Вот что я сделал:

package com.indeed.tests; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait;  //**and this 

public class IndeedJobSearch { 

public static void main(String[] args) throws InterruptedException { 
    // TODO Auto-generated method stub 

    //Create firefox driver to drive the browser 

    WebDriver driver; 

    System.setProperty("webdriver.gecko.driver", "C:\\Users\\BURRITOBEAST\\Downloads\\jars\\geckodriver-v0.14.0-win64\\geckodriver.exe"); 

    driver = new FirefoxDriver(); 

    WebDriverWait wait = new WebDriverWait(driver,10); //**and this. 10 is the number of seconds it'll wait before an error is thrown. 

    //Open Indeed homepage 
    driver.get("http://www.indeed.com"); 
    //Find the 'what' field and enter "selenium" 
    driver.findElement(By.id("what")).sendKeys("Selenium"); 
    //Find the 'location' field and enter "San Diego, CA" 
    driver.findElement(By.id("where")).clear(); 
    driver.findElement(By.id("where")).sendKeys("San Diego, CA"); 
    //Find the 'findjobs' button and click on it 
    driver.findElement(By.id("fj")).click(); 

    wait.until(ExpectedConditions.elementToBeClickable(By.id("prime-popover-close-button"))); //**this is where the magic happens 

    //Thread.sleep(1000); **tested my idea first using a sleep. then found the wait method after. plus, i want to avoid sleeps if possible to make things speedy. 
    driver.findElement(By.id("prime-popover-close-button")).click(); 

    //From the job search results page, get page title and jobs count msg 

} 
} 
+0

Доброе утро @BurritoBandit, WOW, большое спасибо. Так вот в чем проблема! Элемент был недоступен сразу, поэтому я не мог его закрыть !!!! Спасибо, мне за это стоит подумать, и я чувствую, что узнал что-то очень важное для будущего! ВЫ Удивительны! Я собираюсь узнать больше об этом Ожидаемые условия и ждать водителя :) – Fox23

 Смежные вопросы

  • Нет связанных вопросов^_^