2013-04-14 1 views
0

У меня проблема с кнопкой «ПОИСК» с использованием Selenium. Мне нужно нажать кнопку «Поиск», затем вернуться на начальную страницу и снова щелкнуть ее. Мой код перемещает эту кнопку и щелкает ее совершенно нормально в первый раз, затем веб-страница возвращается к исходному URL. Затем он должен снова перемещаться по той же кнопке, но это не работает ... Я использовал много разных способов (xpath и т. Д.). В чем проблема? Вот мой ПОЛНЫЙ код. Можно скопировать его в затмение и посмотреть, о чем я говорю:Как перейти и нажать кнопку на веб-странице с помощью Selenium WebDriver?

 import java.util.concurrent.TimeUnit; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.chrome.ChromeDriver; 

    public class Search { 

public static void main(String[] args) throws InterruptedException { 

    System.setProperty("webdriver.chrome.driver", 
      "chromedriver\\chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 

    // Getting the initial page 
    driver.get("http://pqasb.pqarchiver.com/chicagotribune/advancedsearch.html"); 
    driver.findElement(By.xpath("//input[@value='historic']")).click(); 
    WebElement element = driver.findElement(By.name("QryTxt")); 
    element.sendKeys("issue"); 
    driver.findElement(
      By.xpath("//input[@value='Search'][@onclick='return checkinput(this.form, 0);'][@type='button']")) 
      .click(); 

    // Getting back to the initial page 
    driver.get("http://pqasb.pqarchiver.com/chicagotribune/advancedsearch.html"); 
    driver.findElement(
      By.xpath("//input[@value='Search'][@onclick='return checkinput(this.form, 0);'][@type='button']")) 
      .click(); 
    /** 
    * This command does not execute. It is supposed to click on the button 
    * "SEARCH" It worked well in the above identical code line, however now 
    * it just does not recognize the existence of this button How can I 
    * overcome this issue? I tried navigating this button by all different 
    * means (xpath etc...) 
    */ 
} 

    } 
+0

Что произойдет, если вы явный ждать HTTP: //docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits – jithujose

+0

@jithujose Я попробовал это. Это тоже не работает. – Buras

+0

@jithujose Вот как я устал явным ждать. WebDriverWait wait = новый WebDriverWait (драйвер, 60); \t \t wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("// input [@ value = 'Search'] [@ onclick = 'return checkinput (this.form, 0);'] [@ type = 'button «]"))); \t \t driver.findElement ( \t \t \t \t By.xpath ("// ввод [@ значение = 'Поиск'] [@ OnClick = 'возвращение checkinput (this.form, 0);'] [@ тип =» кнопка '] ")) \t \t \t \t .click(); – Buras

ответ

1

Любые исключения? Изменен ли DOM после перенаправления? Какой браузер вы используете?

Я заметил, что кнопка изменилась на <input type="button" onclick="return checkinput(this.form, 1);" value="Search"/> после перехода к URL-адресу снова.

так что вам нужно driver.findElement( By.xpath("//input[@value='Search'][@onclick='return checkinput(this.form, 1);'][@type='button']")).click();

+0

Спасибо, я этого не заметил :) – Buras

+0

Рад, что он исправлен. Обратите внимание, что это происходит только при «историческом» поиске, если вы пользуетесь «текущей» радиокнопкой, значение onclick кнопки не изменится после перенаправления. –

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