selenium span link li not working

时间:2013-05-24 10:43:20

标签: selenium selenium-webdriver

我是硒的新手。我正在练习在http://www.countdown.tfl.gov.uk上写一个测试用例。以下是我遵循的步骤:

  • a)我将浏览器打开到selenium Web Driver
  • b)找到搜索文本框并输入H32并单击搜索按钮以获取selenium。

直到这部分它才能正常工作。

现在在页面上,我实际上在搜索下的页面左侧获得了两条记录。我实际上是想点击第一个,即“走向Southall,Townhall”链接。什么也没发生。

以下是我的代码:

 public class CountdownTest {   
        @Test
        public void tflpageOpen(){
            WebDriver driver = openWebDriver();
            searchforBus(driver,"H32");
                selectrouteDirection(driver)

        }

    //open the countdowntfl page
        private WebDriver openWebDriver(){
            WebDriver driver = WebDriverFactory.getWebDriver("FireFox");
            driver.get("http://www.countdown.tfl.gov.uk");
            return driver;

        }
        private void searchforBus(WebDriver driver,String search){
            WebElement searchBox = driver.findElement(By.xpath("//input[@id='initialSearchField']"));
            searchBox.sendKeys(search);
            WebElement searchButton = driver.findElement(By.xpath("//button[@id='ext-gen35']"));
            searchButton.click();

        }
        private void selectrouteDirection(WebDriver driver){
            WebElement towardssouthallLink= driver.findElement(By.xpath("//span[@id='ext-gen165']']"));
            ((WebElement) towardssouthallLink).click();

        }
    }

请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:0)

由于您现在正在获取NoSuchElement Exception,因此您可以尝试使用以下代码WebDriver explicit wait

WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement towardssouthallLink = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("(//*[@id='route-search']//li/span)[1]")));
towardssouthallLink.click();

WebDriver implicit wait

WebDriver driver = WebDriverFactory.getWebDriver("FireFox");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://www.countdown.tfl.gov.uk");

提示:

  • 搜索结果需要一些时间来检索,因此请使用Explicit waitImplicit wait
  • 不要使用像span[@id='ext-gen165']这样的定位器,它们是自动生成的ExtJ。
  • 在这种情况下,也可以使用css选择器:#route-search li:nth-of-type(1) > span

答案 1 :(得分:0)

您没有致电selectrouteDirection

你可能想要:

@Test
public void tflpageOpen(){
    WebDriver driver = openWebDriver();
    searchforBus(driver,"H32");
    selectrouteDirection(driver);
}

你也不需要在这里施放:

((WebElement) towardssouthallLink).click();

无论如何,它已经是WebElement

答案 2 :(得分:0)

我发现这些链接的id是动态生成的。 id的格式为'ext-genXXX',其中XXX是动态生成的数字,因此每次都会变化。

实际上,您应该尝试使用linkText:

'走向Southall,市政厅'

driver.findElement(By.linkText("Towards Southall, Town Hall")).click

'走向豪恩斯洛,巴士站'

driver.findElement(By.linkText("Towards Hounslow, Bus Station")).click

这是一个逻辑: 获取所有以'ext-gen'开头的id开头的元素&迭代它&单击带有匹配文本的链接。以下是Ruby代码(对不起,我不太了解Java):

links = driver.find_elements(:xpath, "//span[starts-with(@id, 'ext-gen')]")

links.each do |link|
   if link.text == "Towards Southall, Town Hall"
     link.click
     break
   end
end