2016-07-04 5 views
0

Мне не удается открыть ссылку href, используя код ниже. Я использовал код для хранения имен тегов в качестве веб-элементов и повторил, чтобы указать на мой целевой href. Пожалуйста, предложите, что изменить в приведенном выше коде, поскольку вывод указывает на наличие нулевых ссылок.Невозможно нажать ссылку href с помощью selenium

String path="http://google.com"; 

WebDriver driver = new ChromeDriver(); 
driver.get(path); 
driver.manage().window().maximize(); 

driver.findElement(By.name("q")).sendKeys("hdmi"); 
driver.findElement(By.name("btnG")).click(); 


//first get all the <a> elements 
List<WebElement> linkList=driver.findElements(By.tagName("a")); 

//now traverse over the list and check 
for(int i=0 ; i<linkList.size() ; i++) 
{ 
    if(linkList.get(i).getAttribute("href").contains("http://www.hdmi.org/")) 
    { 
     linkList.get(i).click(); 
     break; 
    } 
} 
+0

Вы загрузили и использовали «chromeDriver»? – Amol

+0

Что значит «невозможно открыть»? Вы получаете какие-либо ошибки? – Andersson

+0

@ Andersson Функциональность кода заключается в том, чтобы открыть ссылку href, код открывает google.com и отправляет «hdmi» в качестве ключевого слова. как только он откроет несколько ссылок на «hdmi», он не будет продвигаться дальше, где присутствует ссылка href. –

ответ

1

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

driver.findElement(By.name("q")).sendKeys("hdmi"); 
driver.findElement(By.name("btnG")).click(); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[href*='http://www.hdmi.org/']"))).click(); 

ПРИМЕЧАНИЕ: Существует более одной ссылки, которая соответствует вашим требованиям, но этот код нажимает только первый.

1

Вы должны выполнить некоторые wait, прежде чем найти список, как показано ниже: -

String path="http://google.com"; 

WebDriver driver = new ChromeDriver(); 
driver.get(path); 
driver.manage().window().maximize(); 

driver.findElement(By.name("q")).sendKeys("hdmi"); 
driver.findElement(By.name("btnG")).click(); 

//wait.. 
Thread.sleep(2000); 

//first get all the <a> elements 
List<WebElement> linkList = driver.findElements(By.tagName("a")); 

//now traverse over the list and check 
for(WebElement el : linkList) 
{ 
    String link = el.getAttribute("href"); 
    if((link !=null) && (link.contains("http://www.hdmi.org/"))) 
    { 
     el.click(); 
     break; 
    } 
} 

Для более лучшего решения, которое вы можете использовать WebDriverWait здесь, чтобы найти эту ссылку только без использования цикла, как показано ниже: -

driver.findElement(By.name("q")).sendKeys("hdmi"); 
driver.findElement(By.name("btnG")).click(); 

WebDriverWait wait = new WebDriverWait(driver, 20); 
WebElement link = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(@href,'http://www.hdmi.org/')]"))); 
link.click(); 

Надеется, что это поможет ... :)

+0

Использование 'Thread.sleep()' в подобных случаях не является хорошей практикой и не является необходимым. – JeffC

+0

@JeffC Уже задан пример 'WebDriverWait' ... –

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