Элемент не взаимодействует: элемент имеет нулевой размер

#java #selenium #selenium-chromedriver

#java #селен #селен-хромовый преобразователь #selenium-chromedriver

Вопрос:

Я новичок в selenium и все еще учусь. Следуя вместе с некоторыми старыми видео, и я столкнулся с проблемой, когда bing.com имеет выпадающее меню с тремя точками, в то время как видео этого не делает. Предполагается, что скрипт переходит по ссылке за ссылкой, щелкает и захватывает URL-адрес, возвращается назад и переходит к следующей ссылке. Однако, поскольку после первой ссылки все находится в выпадающем меню с тремя точками, кажется, что chrome не может щелкнуть этот элемент.

 package WorkingWithLinks;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class TC6GetLinkNameAndUrl {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\Users\phaak\OneDrive\Desktop\Eclipse Training\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();
        driver.get("http://bing.com");
    
        //count number of link
     
        List<WebElement> links = driver.findElements(By.tagName("a"));
        //if links are displayed
        for (int i = 0; i < links.size(); i  ) {
            if (links.get(i).isDisplayed()) {
                //if displayed, link are captured and clicked
                String name = links.get(i).getText();
                links.get(i).click();
            
                //next page url is captured and printed 
                String url = driver.getCurrentUrl();
                System.out.println(name   "  "   url);
        
                //goes back to previous page
                driver.navigate().back();

                links = driver.findElements(By.tagName("a"));
            }
        }
    }
}
  

Ошибка, которую я получаю,:

Исключение в потоке «main» org.openqa.selenium.WebDriverException: элемент не взаимодействует: элемент имеет нулевой размер

Комментарии:

1. Я бы вообще не использовал щелчок… просто возьмите атрибут href. пример: links.get(i).getAttribute(«href»); (также переопределение массива ссылок во время итерации / цикла на его основе кажется опасным …)

2. @pcalkins sry я должен был быть более ясным, я новичок в кодировании в целом, поэтому я довольно медленный в этом, но можете ли вы уточнить, каким должен быть href?

3. Ваш вопрос неясен, и на домашней странице bing я не смог найти имя тега с

4. ну, я не вижу никакого щелчка по ссылке «…»… Я вижу только этот код, щелкающий по ссылкам, затем получающий текущий URL-адрес, а затем возвращающийся назад. Но вам не нужно будет этого делать, если все, что вам нужно, это получить ссылки. Просто используйте .getAttribute(), чтобы получить href (url) ссылки.

5. теперь понял, спасибо, вы пошли с гораздо более простым кодом — я надеюсь, это то, на что вы ссылались (ссылка на веб-элемент: ссылки) { System.out.println(link.getText() » — » link.getAttribute(«href»));