Temel neden: Selenyum sürücüsü yardımıyla bir driver
sayfa yüklediğinizde, komut dosyası sayfanın tamamen yüklenmesini bekleyin. Ancak bazen web sürücüsünün sayfayı yüklemek daha fazla zaman alır, bu durumda TimeoutException
konsolunuzda istisna görürsünüz .
Çözüm: Sayfa Yükleme çok fazla zaman alıyorsa ve ek alt kaynaklar (resimler, css, js vb.) İndirmeyi durdurmanız gerektiğinde , webLriver aracılığıyla pageLoadStrategy'yi değiştirebilirsiniz.
Aşağıdaki kod sadece html içeriğini sayfadan yükleyin . Sayfa yükleme stratejisini chromeoptions'tan ayarlayabilirsiniz
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Güncellenmiş Çözüm -2: DebanjanB ile aynı fikirdeyim, PageLoad stratejisi Yok ile, ek dosyalar (görüntüler, css, js vb.) İndirmeden test yaparken iyi bir fikir değil. Bununla ilgili tüm sorunları araştırdım ve geçerli bir çözüm bulmaya çalıştım. Bir zamanlar bu sorunu çözmeyi başardığım için aşağıdaki seçenekleri denedim.
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
Hiçbiri yardımcı olmadı ama Sayfa yükleme stratejisiyle tekrar bir çözüm buldum. Bu sefer tüm alt kaynakları indiriyoruz ancak DOMContentLoaded etkinliğini bekliyoruz. Bu stratejiye Eager deniyor . Tüm 3 sayfa yükleme stratejisinin küçük bir tanımı
1. normal:
Bu strateji, Selenyum'un tam sayfa yüklemesini (html içeriği ve indirilen ve ayrıştırılan alt kaynaklar) beklemesine neden olur.
2. istekli:
Bu strateji Selenium'un DOMContentLoaded etkinliğini beklemesine neden olur (yalnızca html içeriği indirildi ve ayrıştırıldı).
3. yok:
Bu strateji, ilk sayfa içeriği tamamen alındıktan hemen sonra Selenium'un geri dönmesine neden olur (html içeriği indirildi).
NOT: Varsayılan olarak, Selenium bir sayfa yüklediğinde, normal pageLoadStrategy öğesini izler.
Sayfa yükleme stratejisi kullanmadan kod snippet'i (Veya varsayılan olarak selenyum tarafından kullanılan Normal)
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Konsol Çıkışı:
41540 numaralı bağlantı noktasından ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / şube kafaları / 3987 @ {# 185}) 'nın başlatılması Yalnızca yerel bağlantılara izin verilir. Kötü amaçlı kodlarla erişimi önlemek için lütfen ChromeDriver tarafından kullanılan bağlantı noktalarını ve ilgili test çerçevelerini koruyun. 11 Şub 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession BİLGİ: Algılanan lehçe: W3C [1581412933.937] [SEVERE]: Oluşturucudan mesaj alma zaman aşımına uğradı: 0.100 [1581412934.066] [SEVERE]: Zaman aşımına uğradı renderer'dan mesaj alma: 0.100 [1581412934.168] [SEVERE]: renderer'dan mesaj alma zaman aşımına uğradı: 0.100 [1581412934.360] [SEVERE]: renderer'dan mesaj alma zaman aşımına uğradı: 0.100 [1581412934.461] [SEVERE]: renderer'dan mesaj alma zaman aşımına uğradı: 0.100 [1581412934.618] [SEVERE]:
PageLoad Stratejisi ile - İstekli:
Kod Parçacığı:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Konsol Çıkışı:
1175 numaralı bağlantı noktasından ChromeDriver 80.0.3987.16'yı (320f6526c1632ad4f205ebce69b99a062ed78647-refs / şube kafaları / 3987 @ {# 185}) başlatma Yalnızca yerel bağlantılara izin verilir. Kötü amaçlı kodlarla erişimi önlemek için lütfen ChromeDriver tarafından kullanılan bağlantı noktalarını ve ilgili test çerçevelerini koruyun. 11 Şub 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createOturum Bilgileri: Algılanan lehçe: W3C
21