How to parse extJS using Jsoup? - selenium

I am trying to parse the html of this link "http://dev.sencha.com/extjs/5.0.0/examples/desktop/index.html" using jsoup but all it gives me is
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Desktop</title>
<!-- The line below must be kept intact for Sencha Cmd to build your application -->
<script type="text/javascript">
<!-- here it shows some script -->
</script>
</head>
<body>
</body>
</html>
How to extract attributes of the notepad icon there so that i can click on that using webdriver?

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Main {
public static void main(String[] args) throws Exception {
WebDriver driver = new FirefoxDriver();
driver.get("http://dev.sencha.com/extjs/5.0.0/examples/desktop/index.html");
WebElement notepadIcon = driver.findElement(By.id("Notepad-shortcut"));
notepadIcon.click();
WebElement notepadDiv = driver.findElement(By.id("notepad"));
driver.switchTo().frame(notepadDiv.findElement(By.id("notepad-editor-inputCmp-iframeEl")));
//Now you have the notepad DOM
System.out.println("Page title is: " + driver.getPageSource());
driver.quit();
}
}
Side note:
I tried using HtmlUnitDriver but as you can see here there seems to be a problem.
Quoting user nlotz
The JavaScript engine used by HtmlUnit chokes on the :first-childselector (used in >= 2.2.1).
Workaround:
Ext.override(Ext.Button, { buttonSelector: 'button:first' }); (reverts
to the selector used in <= 2.2)
Update
The problem with ChromeDriver was that it was too fast. I had the same exception (NoSuchElement) until I put the debugger on. Then everything worked, because the breakpoint gave the web app the time
to finish executing the javascript code it needed. After some research this is what I came up with
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Main {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "PATH_TO_CHROMEDRIVER.EXE");
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
WebDriver driver = new ChromeDriver(options);
driver.get("http://dev.sencha.com/extjs/5.0.0/examples/desktop/index.html");
//This sets an expected condition for the icon. It has to be clickable in 5 seconds.
//After that an Exception will be raised
WebElement notepadIcon = (new WebDriverWait(driver, 5))
.until(ExpectedConditions.elementToBeClickable(By.id("Notepad-shortcut")));
notepadIcon.click();
WebElement notepadDiv = driver.findElement(By.id("notepad"));
driver.switchTo().frame(notepadDiv.findElement(By.id("notepad-editor-inputCmp-iframeEl")));
//Now you have the notepad DOM
System.out.println("Page source: " + driver.getPageSource());
driver.quit();
}
}

Related

IE Web driver - Login button test button doesn't work

I was testing a login page using IE web driver. The login did not redirected to the next page though the username and password was inserted properly. Kindly provide me a solution.
This is my code:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class IELogin {
public static void main(String []args) {
System.setProperty("webdriver.ie.driver","C:\\Users\\dell\\Downloads\\IEDriverServer_Win32_3.9.0\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
driver.get(URL);
driver.manage().window().maximize();
driver.findElement(By.xpath("//input[#id='lemail']")).sendKeys("xxx");
driver.findElement(By.xpath("//input[#id='lpassword']")).sendKeys("xxx");
driver.findElement(By.xpath("//button[#class='btn-save mat-raised-button mat-button-base mat-warn']")).click();
System.out.println("Test Pass");
}
}
This worked for both Chrome and Firefox. But didn't work for IE.
Because IE is slow
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[#id='lemail']"))).sendKeys("xxx");
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[#id='lpassword']"))).sendKeys("xxx");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[#class='btn-save mat-raised-button mat-button-base mat-warn']"))).click();

Not able to click the Inline element using selenium webdriver

enter image description hereNot able to click the inline element using selenium webdriver.
Here is the URL
https://www.google.com/.
Besides Images link (Right side top) there is a square icon. Need to click that icon and select Maps.
Screenshot attached.
I used xpath, cssselector, ID, Name but nothing is working.
Could anyone help me on this.
Code:
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class webelements2 {
public static void main(String[] args) throws InterruptedException
{
System.setProperty("webdriver.gecko.driver","C:\\Users\\rpremala003\\Downloads\\geckodriver-v0.14.0-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com/");
driver.manage().window().maximize();
driver.findElement(By.id("gbwa")).click();
driver.findElement(By.className("gb_3")).click();
}
}
This code is somehow not working in Firefox because it opens the Products page when you click on element - By.id("gbwa"). But if you try the same in Chrome, it works fine. Only thing you would need to change is By.className("gb_3") with By.xpath("//ul[#class='gb_ka gb_da']/li[3]").
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com/");
driver.manage().window().maximize();
driver.findElement(By.id("gbwa")).click();
driver.findElement(By.xpath("//ul[#class='gb_ka gb_da']/li[3]")).click();
For Firefox, you can modify the code so that when the products page is opened, you can click on the Maps option from there.
Some dynamic waits need to be added for controls. Additionally, I noticed that, if google is not set as your home page then you see a message 'Come here often? Make Google your homepage.'. This message needs to be handled, otherwise it will fail the access to the apps icon.
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class webelements2 {
public static void main(String[] args) throws InterruptedException
{
System.setProperty("webdriver.gecko.driver","C:\\Users\\rpremala003\\Downloads\\geckodriver-v0.14.0-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com/");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 10);
if (driver.findElements(By.xpath("//a[#title='No thanks']")).size() !=0) {
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[#title='No thanks']"))));
driver.findElement(By.xpath("//a[#title='No thanks']")).click();
}
driver.findElement(By.xpath("//div[#id='gb']//div[#id='gbwa']/div/a[#title='Google apps' and #role='button']")).click();
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[#id='gb8']/span[text()='Maps']"))));
driver.findElement(By.xpath("//a[#id='gb8']/span[text()='Maps']")).click();
}
}
Try this code and let me know, if you have further queries.
I've tested the code below and it works.
driver.get("https://www.google.com");
driver.findElement(By.cssSelector("a[title='Google apps']")).click();
new WebDriverWait(driver, 3).until(ExpectedConditions.elementToBeClickable(By.id("gb8"))).click();
You basically need to click the Apps icon, wait for the Maps icon to be clickable, and click it.
I'm assuming you don't work for Google so in that case, why test the UI? You can just directly navigate to https://maps.google.com and skip the UI clicks.
How about this ... worked for me.
driver.get("https://www.google.com/");
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[#id='gbwa']//a[#title='Google apps']"))));
driver.findElement(By.xpath(".//*[#id='gbwa']//a[#title='Google apps']")).click();
//click map icon
driver.findElement(By.cssselector("a#gb8")).click();
Use this, working for me.
Use Chrome driver instead of Firefox driver.
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class GoogleMaps {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.google.com/");
driver.manage().window().maximize();
driver.findElement(By.xpath("//*[#id='gbwa']")).click();
driver.findElement(By.xpath("//li/a[#id='gb8']")).click();
Thread.sleep(6000);
driver.quit();
}
}
Output :

i am not able to launch the web browser using TestNG

below is the code : im not able launch the browser using the code . please suggest the solution
import org.openqa.selenium.Test;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.Assert;
import org.testng.annotations.*;
public class NewTest {
public WebDriver driver;`enter code here`
#Test
public void VerifyHomepageTitle() {
WebDriver driver = new FirefoxDriver();
driver.navigate().to("http://google.com");
driver.quit();
}
}
You are closing the web page immediately after opening using 'driver.quit()'. Comment this code and try you will see the difference.

I am getting " org.openqa.selenium.WebDriverException:" when clicking "Addtocart" link in Flipkart Site using selenium webdriver

I am unable to click Add to cart link in this Flipkart site
I am getting " org.openqa.selenium.WebDriverException:" when clicking "Addtocart" link in Flipkart Site using selenium webdriver
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Sample {
public static WebDriver driver;
public static void main(String[] args) {
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.get("http://www.flipkart.com/samsung-galaxy-j7-6-new-2016-edition/p/itmegmrnggh56u22?pid=MOBEG4XWDK4WBGNU&al=5%2Fv2LfAd8f%2F5738uEXqULMldugMWZuE7Qdj0IGOOVqv3euFa7evSptHq1kfBhuSDZH5Pp6sYgwI%3D&ref=L%3A2032472314537789506&srno=b_1");
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[#value='Add to Cart']")));
driver.findElement(By.xpath("//input[#value='Add to Cart']")).click();
}
}
You should click on button (input), not the form itself:
...
driver.findElement(By.xpath("//input[#value='Add to Cart']")).click();
If page takes some time to load, you may need to wait for button to become clickable first, and then click it:
(new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(
By.xpath("//input[#value='Add to Cart']"))
.click();
It seems that there is a div is showing up when you are trying to click the button. At the moment, that div (vmiddle) is hidden.
It seems like this, when I disable the hidden:
Try to debug on your ide first. When you see that this div is in front of your "add to cart" button, try this:
1. If that is a popup and can be closed, close it and click add to cart
2. If not, try to scroll down and click the button when you see it.
scroll method can be like
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");
I have found the solution.
Using JavaScriptExecutor I have clicked the Button. Thanks for the support. Below is the working code.
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutor;
public class Flipkart {
public static WebDriver driver;
public static void main(String[] args) throws InterruptedException {
driver = new FirefoxDriver();
// driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.get("http://www.flipkart.com/samsung-galaxy-j7-6-new-2016-edition/p/itmegmrnggh56u22?pid=MOBEG4XWDK4WBGNU&al=5%2Fv2LfAd8f%2F5738uEXqULMldugMWZuE7Qdj0IGOOVqv3euFa7evSptHq1kfBhuSDZH5Pp6sYgwI%3D&ref=L%3A2032472314537789506&srno=b_1");
Thread.sleep(3000);
jsclick(driver.findElement(By.xpath("//input[#value='Add to Cart']")));
public static void jsclick(WebElement element){
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();",element);
}
}

Element is not clickable at point using chrome driver

I am trying to download payslip as PDF from greytip web portal using chrome driver.i am trying to click on link salary by using "driver.findElement(By.linkText("Salary")).click();".But i am unable to click the link and failed with following exception.
Error
org.openqa.selenium.WebDriverException: Element is not clickable at point (198, 139). Other element would receive the click: ... (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 37 milliseconds
And also when ever i ran the script chrome open one extra tab for bit torrent.so here when i ran the program one tab is opened for "https://psdpl.greytip.in" and another tab is opened for bittorrent.How can i handle not to open another bittorrent tab when i ran the program.
Here i am attaching the code and screen shots.enter image description here
Code
package com.webdriver.tests;
import static org.junit.Assert.*;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class PaySlipPDF {
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();
#Before
public void setUp() throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\soleti\\D-Drive\\Selenium\\chromedriver\\chromedriver.exe");
driver = new ChromeDriver();
baseUrl = "https://psdpl.greytip.in/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
#Test
public void testPayslip() throws Exception {
driver.get(baseUrl + "/login.do");
driver.findElement(By.id("j_username")).clear();
driver.findElement(By.id("j_username")).sendKeys("101786");
driver.findElement(By.id("j_password")).clear();
driver.findElement(By.id("j_password")).sendKeys("password");
driver.findElement(By.id("login-button")).click();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
//driver.findElement(By.xpath("//*[#id='home-page']/div[1]/div[1]/ul/li[2]/a")).click();
WebElement elementToClick = driver.findElement(By.xpath("//*[#id='home-page']/div[1]/div[1]/ul/li[2]/a"));
System.out.println(elementToClick);
// Scroll the browser to the element's Y position
((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();
//driver.findElement(By.linkText("Salary")).click();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.findElement(By.linkText("View Payslips")).click();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
new Select(driver.findElement(By.id("payroll"))).selectByVisibleText("Mar 2012");
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.findElement(By.className("btn btn-gts-print")).click();
}
#After
public void tearDown() throws Exception {
//driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
}
It is the BitTorrent toolbar that is causing the issue. It is launched into Chrome by an extension. Either uninstall it completely, or force Selenium to tell Chrome to disable all extensions. This can be done using the ChromeOptions class:
http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/chrome/ChromeOptions.html
Use the addArgument method and give it this arguement, which tells Chrome to disable all user extensions:
--disable-extensions
Check the browser settings and see if the default homepage has been changed by the bit torrent toolbar that is installed. If not needed, try to uninstall the bitTorrent toolbar from the browser and rerun your selenium program. Hope this helps.
This problem is specificaly related to chrome installed on your system..Uninstall the google chrome and re-install it..That will fix your problem..:)