# cheat sheet of all important Selenium syntax (Java + TestNG + Maven)

Here’s a complete **cheat sheet of all important Selenium syntax** (Java + TestNG + Maven) commonly asked in interviews:

---

## 🔹 **1\. WebDriver Setup**

```java
javaCopyEditWebDriver driver = new ChromeDriver();                     // Chrome
WebDriver driver = new FirefoxDriver();                    // Firefox
WebDriver driver = new EdgeDriver();                       // Edge
driver.get("https://example.com");                         // Navigate
```

---

## 🔹 **2\. WebElement Locators**

```java
javaCopyEditdriver.findElement(By.id("id"));
driver.findElement(By.name("name"));
driver.findElement(By.className("class"));
driver.findElement(By.tagName("input"));
driver.findElement(By.linkText("Click Here"));
driver.findElement(By.partialLinkText("Click"));
driver.findElement(By.xpath("//input[@type='text']"));
driver.findElement(By.cssSelector("input[type='text']"));
```

---

## 🔹 **3\. Send Keys & Click**

```java
javaCopyEditdriver.findElement(By.id("username")).sendKeys("admin");
driver.findElement(By.id("login")).click();
```

---

## 🔹 **4\. Dropdowns with Select**

```java
javaCopyEditSelect dropdown = new Select(driver.findElement(By.id("dropdown")));
dropdown.selectByVisibleText("Option 1");
dropdown.selectByIndex(2);
dropdown.selectByValue("value1");
```

---

## 🔹 **5\. Alerts**

```java
javaCopyEditAlert alert = driver.switchTo().alert();
alert.accept();       // OK
alert.dismiss();      // Cancel
alert.getText();      // Read alert message
alert.sendKeys("data");
```

---

## 🔹 **6\. Frames**

```java
javaCopyEditdriver.switchTo().frame(0);                      // by index
driver.switchTo().frame("frameName");            // by name
driver.switchTo().frame(driver.findElement(By.id("frameId")));  // by element
driver.switchTo().defaultContent();              // back to main page
```

---

## 🔹 **7\. Window Handling**

```java
javaCopyEditString mainWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();

for (String window : allWindows) {
    if (!window.equals(mainWindow)) {
        driver.switchTo().window(window);
    }
}
```

---

## 🔹 **8\. Waits**

### ➤ Implicit Wait

```java
javaCopyEditdriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
```

### ➤ Explicit Wait

```java
javaCopyEditWebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
```

### ➤ Fluent Wait

```java
javaCopyEditWait<WebDriver> wait = new FluentWait<>(driver)
    .withTimeout(Duration.ofSeconds(20))
    .pollingEvery(Duration.ofSeconds(2))
    .ignoring(NoSuchElementException.class);
```

---

## 🔹 **Mouse & Keyboard Actions**

```java
javaCopyEditActions act = new Actions(driver);
act.moveToElement(element).perform();                 // Hover
act.click().perform();                               // Click
act.doubleClick(element).perform();                  // Double-click
act.contextClick(element).perform();                 // Right-click
act.dragAndDrop(source, target).perform();           // Drag & drop
act.sendKeys(Keys.ENTER).perform();                  // Press ENTER
```

---

## 🔹 **JavaScript Executor**

```java
javaCopyEditJavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0,500)");
js.executeScript("arguments[0].click();", element);
```

---

## 🔹 **Screenshots**

```java
javaCopyEditFile src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("path/screenshot.png"));
```

---

## 🔹 **Close Browser**

```java
javaCopyEditdriver.close();     // Close current tab
driver.quit();      // Close all tabs & end session
```

---

## 🔹 **TestNG Annotations**

```java
javaCopyEdit@BeforeClass
public void setup() {}

@AfterClass
public void teardown() {}

@Test(priority=1, groups="sanity", enabled=true)
public void loginTest() {}

@DataProvider(name = "loginData")
public Object[][] data() {}

@Test(dataProvider = "loginData")
public void login(String user, String pass) {}
```

---

## 🔹 **Assertions (TestNG)**

```java
javaCopyEditAssert.assertEquals(actual, expected);
Assert.assertTrue(condition);
Assert.assertFalse(condition);
Assert.assertNotEquals(a, b);
```

---

## 🔹 **Maven Commands**

```java
bashCopyEditmvn clean         # Deletes /target
mvn compile       # Compiles Java code
mvn test          # Runs TestNG tests
mvn package       # Packages to JAR/WAR
mvn install       # Installs to local repo
```

---

## 🔹 **POM.xml Example (Selenium + TestNG)**

```java
xmlCopyEdit<dependencies>
  <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.21.0</version>
  </dependency>
  <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.10.0</version>
    <scope>test</scope>
  </dependency>
</dependencies>
```

---

## 🔹 **Run Selenium Test via TestNG XML**

```java
xmlCopyEdit<suite name="AllTests">
  <test name="LoginTests">
    <classes>
      <class name="tests.LoginTest"/>
    </classes>
  </test>
</suite>
```

Run using:

```java
bashCopyEditmvn clean test -Dsurefire.suiteXmlFiles=testng.xml
```
