Webdriver JavascriptExecutor взаимодейства с елементи и отваря и обработва множество раздели и получава url и домейн

Това е продължение на https://medium.com/@smeesheady/using-webddriver-javascriptexecutor-navigate-to-a-url-and-navigate-forward-and-backward-and-7c0e46ff5ee4

Моля, вижте пълния код.

package com.webdriver.blogs;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/*
It's a Selenium Interface which directly lets you Interact with HTML DOM of the web page.
It  is being implemented by all the following classes:
FirefoxDriver
ChromeDriver
InternetExplorerDriver
EdgeDriver
OperaDriver
SafariDriver
RemoteWebDriver
EventFiringWebDriver
it does so by executing JavaScript expressions using Following Syntax :
executeScript(): This method executes JavaScript in the context of the currently selected frame or window.
The script fragment provided will be executed as the body of an anonymous function.
Within the script you need to use document to refer to the current document.
Note that local variables will not be available once the script has finished executing, though global variables will persist.
*
JavascriptExecutor provides a way to automate a user interaction even when page is not essentially loaded completely or elements are placed in a way that the direct interaction is blocked.
While you execute your Selenium script at times because of cross domain policies browsers enforce your script execution may fail unexpectedly
This however is also the disadvantage too, if you want to automate a web page as if a real user experience.
That said, although it is a really powerful option,
but we should try not to use JavaScript Executor unless there is no standard way of doing it via Selenium.
*/
public class JavaScriptSamplesInWebdriver {
WebDriver driver;
@BeforeClass()
public void setUp() {
System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"\\Jar_files\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@Test(priority=1,enabled=false,description="Navigate to website using java script and go back and forward")
public void GoToUrlAndNavigateBackAndForward() throws InterruptedException {
String url="https://bitbucket.org/";
//Define a js object with type of JavascriptExecutor class and here the TypeCasting is applied
JavascriptExecutor js = (JavascriptExecutor) driver;
//The url is parameterized and \ \ signs are optional and This is similar to  driver.get("https://www.bbc.com/");
js.executeScript("window.location = \'"+url+"\'");
//Without parameterizing the url
js.executeScript("window.location = 'https://www.bbc.com/'");
//To navigate back (-1)--> back   This is similar to  driver.navigate().back();
js.executeScript("window.history.go(-1)");
Thread.sleep(6000);
//To go forward Forward(-1)--> front.     driver.navigate().forward();
js.executeScript("window.history.forward(-1)");
Thread.sleep(6000);
//Refresh the page  This is similar to driver.navigate().refresh();
js.executeScript("history.go(0);");
}
@Test(priority=2,enabled=false,description="Navigate to website and verify details using a Javascript")
public void navigateToWebSite() {
//Creating the JavascriptExecutor interface object called js by Type casting
JavascriptExecutor js = (JavascriptExecutor) driver;
//make sure to put '' so the value is 'https://www.google.com/'
String url="https://www.google.com/";
//js.executeScript("window.location = 'https://www.google.com/'");
js.executeScript("window.location = \'"+url+"\'");
String actualWebTitle =  js.executeScript("return document.title;").toString();
//driver.getTitle(); <title>Google</title>
System.out.println("Actual Title of the website is "+actualWebTitle);
Assert.assertEquals("Google", actualWebTitle,"Web site's title mismatches");
//Fetching the Domain Name of the site. Tostring() change object to name.
String domainName = js.executeScript("return document.domain;").toString();
Assert.assertEquals("www.google.com", domainName,"Web site's domain mismatches");
System.out.println("Domain name of the site = "+domainName);
//get  the URL of the site.
String currentUrl = js.executeScript("return document.URL;").toString();
String webDrivercurrentUrl=driver.getCurrentUrl();
System.out.println("webDrivercurrentUrl is "+webDrivercurrentUrl);
Assert.assertEquals("https://www.google.com/", currentUrl,"Web site's url mismatches");
System.out.println("URL of the site = "+currentUrl);
String pageIsReady=js.executeScript("return document.readyState").toString();
System.out.println("Page is ready "+pageIsReady);
Assert.assertEquals("complete", pageIsReady,"Web site is loaded and page is ready");
}
@Test(priority=3,enabled=false,description="Ener some values using javascript")
public void FillValuesUsingJavaScript() throws InterruptedException {
String url="https://stackoverflow.com/users/signup?ssrc=head&returnurl=%2fusers%2fstory%2fcurrent";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.location = \'"+url+"\'");
//Enter a value using javascript by locating element using  getElementById
js.executeScript("document.getElementById('display-name').value='Sam';");
//Enter a value using javascript by locating element using
js.executeScript("document.getElementById('password').value='welcome123';");
//We can parameterize the locator and value
String emailval="[email protected]";
String emailLocatorByName="email";
String passwordLocatorByName="password";
js.executeScript("document.getElementById('"+emailLocatorByName+"').value=\'"+emailval+"\';");
//Click on text field by locating element busing  getElementById
//js.executeScript("document.getElementById('password').click();");
js.executeScript("document.getElementById('"+passwordLocatorByName+"').click();");
//Handle checkbox
js.executeScript("document.getElementById('opt-in').checked=true;");
Thread.sleep(12500);
js.executeScript("document.getElementById('opt-in').checked=false;");
String theTextIWant = (String) js.executeScript("return arguments[0].value;",driver.findElement(By.xpath("//input[@id='display-name']")));
System.out.println("========================="+theTextIWant);
//Refresh the page  This is similar to driver.navigate().refresh();
js.executeScript("history.go(0);");
//Javascript command
//http://www.inviul.com/send-texts-get-texts-selenium/
//https://www.guru99.com/execute-javascript-selenium-webdriver.html
}
@Test(priority=4,enabled=true,description="Click buttons using java Script")
public void ClickButtonUsingJavaScript() throws InterruptedException {
String url="https://www.ebay.com/";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.location = \'"+url+"\'");
String txtSearchLocator="gh-ac";
String btnSearchLocatouter="gh-btn";
String searchValue="Router";
js.executeScript("document.getElementById('"+txtSearchLocator+"').value=\'"+searchValue+"\';");
js.executeScript("document.getElementById('"+btnSearchLocatouter+"').click();");
//Open an another tab without parameterising the url
// js.executeScript("window.open('https://www.facebook.com')");
//Open an another tab by parameterising the url
String secondurl="https://www.facebook.com";
js.executeScript("window.open(\'"+secondurl+"\')");
// Store all currently open tabs in tabs
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
// Switch newly open Tab by index 1
driver.switchTo().window(tabs.get(1));
String txtEmail="email";
String txtEmailhLocatouterVal="[email protected]";
String txtPassword="pass";
String txtPasswordVal="welcome123";
js.executeScript("document.getElementById('"+txtEmail+"').value=\'"+txtEmailhLocatouterVal+"\';");
js.executeScript("document.getElementById('"+txtPassword+"').value=\'"+txtPasswordVal+"\';");
Thread.sleep(7500);
// Close newly open tab after performing above operations. This is similar to driver.close();
js.executeScript("window.close()");
// Switch to old(Parent) tab.
driver.switchTo().window(tabs.get(0));
//Clear text field in main window
js.executeScript("document.getElementById('"+txtSearchLocator+"').value='';");
Thread.sleep(7500);
}
@AfterSuite()
public void shutDown() {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.close()"); // didnt work
driver.close(); //This method closes the browser window on which the focus is set.
driver.quit();// basically calls driver.dispose a now internal method which in turn closes all of the browser windows and ends the WebDriver session gracefully.
try {
Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe");
} catch (IOException e1) {
e1.printStackTrace();
}
System.out.println("***************End of testing shutdown happend**************************");
}
}

Моля, вижте безплатния URL адрес на видеоклипа — https://youtu.be/H1INiSQlnhM

Моля, следвайте автора — https://www.linkedin.com/in/sameera-de-silva-11247922/