क्रोम से कनेक्ट होकर बाहर आया, पुनः प्रयास कर रहा है ... सेलेनियम के माध्यम से क्रोमड्राइवर 2.43 और क्रोम का उपयोग करके त्रुटि
मैं ईमानदारी से यह भी निश्चित नहीं कर रहा हूं कि इस बिंदु पर क्या करना है मुझे कंसोल में कोई त्रुटि लॉग नहीं मिल रहा है बस मैंने जो स्क्रिप्ट में डाल दिया है।
जब मैं कोड की लाइन में पहुंच जाता हूं, जहां मैं डैशबोर्ड कंस्ट्रक्टर बनाता हूं तो यह परीक्षण को समाप्त कर देता है और इसे विफलता घोषित करता है, अंतिम लॉग संदेश हमेशा "के बारे में देखना शुरू करना" होता है
मैंने इस प्रश्न को पोस्ट करने से पहले पूरे कंस्ट्रक्टर (सभी कोड पर टिप्पणी की, ड्राइवर पैरामीटर को हटा दिया, और बस एक प्रिंट स्टेटमेंट डाल दिया) जब मैंने कक्षा के भीतर प्रिंट विधि को कॉल किया तो स्क्रिप्ट उस रेखा पर विफल रही जहां सृजन कंस्ट्रक्टर हुआ।
मुझे समझ में नहीं आ रहा है कि मैं क्या कर रहा हूँ जो बहुत स्पष्ट रूप से याद आ रही है। मुझे विफलता मिलती है लेकिन मुझे कंसोल में कोई विशेष त्रुटि संदेश दिखाई नहीं देता है।
यहाँ परीक्षण केस im चलाने का प्रयास कर रहा है:
package com.symphio.testCases;
import java.util.concurrent.TimeUnit;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.symphio.pageObjects.Dashboard;
import com.symphio.pageObjects.loginSymphio;
public class TC_Dashboard_Search_002 extends BaseClass{
@Test
public void searchForTile() throws InterruptedException {
logger.info("Connected to "+ baseURL);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
loginSymphio login = new loginSymphio(driver);
//logs in
login.setUserName(userName);
logger.info("entered username");
login.setPassWord(passWord);
logger.info("entered password");
login.pressSubmit();
logger.info("button pressed");
//searches for tile
Thread.sleep(3000);
logger.info("about to start looking");
Dashboard dashboard = new Dashboard(driver);
dashboard.mouseMover();
logger.info("found Icon");
dashboard.searchBarText(searchText);
logger.info("input text");
dashboard.tileClick();
logger.info("clicked");
}
}
यहाँ मेरा डैशबोर्ड पृष्ठ है
package com.symphio.pageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Dashboard {
WebDriver driver;
public Dashboard(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@FindBy(className="search-container")
WebElement searchImg;
@FindBy(xpath="//input[@type='search']")
WebElement searchText;
@FindBy(xpath="//input[contains(@class,'mat-card'), and contains(@class, 'mat-focus-indicator'), and contains(@class, 'arrangement-card')]")
WebElement tileBox;
Actions actions = new Actions(driver);
public void mouseMover() {
Actions mouseOverOnElement = actions.moveToElement(searchImg);
mouseOverOnElement.perform();
}
public void searchBarText(String text) {
searchText.sendKeys(text);
}
public void tileClick() {
tileBox.click();
}
}
कंसोल त्रुटि:
जवाब
यह त्रुटि संदेश ...
...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
... मतलब का तात्पर्य है कि कि ChromeDriver / google-chrome कॉम्बो उपयोग कर रहे हैं हाल ही में एक के रूप में की वर्तमान कार्यान्वयन नहीं है ChromeDriver इस प्रकार WebDriver W3C विनिर्देशों और प्रारंभिक लॉग को दर्शाता है:
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Nov 05, 2019 3:41:53 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
तो आपका मुख्य मुद्दा उन बायनेरिज़ के संस्करण के बीच असंगति है जो आप निम्नानुसार उपयोग कर रहे हैं:
- आप क्रोमेड्रिवर = 2.43 का उपयोग कर रहे हैं
- क्रोमेड्रिवर के रिलीज नोट्स = 2.43 में स्पष्ट रूप से निम्नलिखित का उल्लेख है:
Chrome v69-71 का समर्थन करता है
- संभवतः आप नवीनतम क्रोम = 84.0 का उपयोग कर रहे हैं
- ChromeDriver v84.0 के रिलीज़ नोट्स में स्पष्ट रूप से निम्नलिखित का उल्लेख है:
Chrome संस्करण 84 का समर्थन करता है
इसलिए ChromeDriver v2.43 और Chrome Browser v84.0 के बीच एक स्पष्ट मेल नहीं है
उपाय
सुनिश्चित करें कि:
- JDK को वर्तमान स्तर JDK 8u251 में अपग्रेड किया गया है ।
- सेलेनियम वर्तमान स्तर संस्करण 3.141.59 में उन्नत है ।
- ChromeDriver को वर्तमान ChromeDriver v84.0 स्तर पर अपडेट किया गया है।
- Chrome को वर्तमान Chrome संस्करण 84.0 स्तर पर अपडेट किया गया है। ( ChromeDriver v84.0 जारी नोट के अनुसार )
- यदि आपका आधार वेब क्लाइंट संस्करण बहुत पुराना है, तो इसे अनइंस्टॉल करें और वेब क्लाइंट का हालिया GA और रिलीज़ किया गया संस्करण स्थापित करें ।
- अपने आईडीई के माध्यम से अपने प्रोजेक्ट कार्यक्षेत्र को साफ करें और केवल आवश्यक निर्भरता के साथ अपनी परियोजना का पुनर्निर्माण करें।
- एक सिस्टम रिबूट लें ।
- अपने गैर-रूट उपयोगकर्ता के
@Test
रूप में निष्पादित करें। - हमेशा WebDriver और Web Client इंस्टेंस को शालीनतापूर्वक बंद करने और नष्ट करने की विधि के
driver.quit()
भीतर आह्वान करें ।tearDown(){}
संदर्भ
आप प्रासंगिक विस्तृत चर्चा के एक जोड़े को पा सकते हैं:
- बायो-डायलेक्ट सत्र का प्रयास करना, पोस्टेल के नियम को दूरस्थ छोर पर सही मानता है और ChromeDriver और सेलेनियम का उपयोग करके मूल OSS JSON पर वापस गिरता है
मुझे लगता है कि यहाँ समस्या यह है कि अभी ड्राइवर डैशबोर्ड क्लास में इनिशियलाइज़ नहीं हुआ है।
डैशबोर्ड को बेसक्लास में विस्तारित करने का प्रयास करें।
public class Dashboard extends BaseClass {
public Dashboard(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}